Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как создать аттрибут xmlns: с помошью xslt 
:(
    Опции темы
lankin
Дата 28.10.2009, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 377
Регистрация: 13.12.2006

Репутация: нет
Всего: нет



Нужно создать вот такую строку:
Код

<rss version="2.0" xmlns:myNS="http://.......">


где myNS - мой нэмспэйс, который я буду использовать внутри RSS, расширяя его.

щас пока вот что есть:
Код

<xsl:stylesheet version="1.0" xmlns:myNS="http://.......">
<xsl:output method="xml" encoding="utf-8" version="1.0" standalone="yes"/>
<xsl:template match="/">
    <xsl:element name="rss">
      <xsl:attribute name="version">2.0</xsl:attribute>
.
        <xsl:element name="myNS:ModificationDatetime">
        <xsl:value-of select="ModificationDatetimeString"/>
    </xsl:element>
.
.
      </xsl:element>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>


Результат:
Код

<rss version="2.0">
<channel>
  <title/>
  <link/>
  <description/>
<item>
  <title/>
  <link/>
  <description/>
  <myNS:ModificationDatetime xmlns:myNS="http://.......">04.08.2009 12:16</myNS:ModificationDatetime>
</item>
</rss>


Как видите, щас нэмспэйс прописывается каждый раз внутри элемента myNS:, а мне нужно, чтобы он был прописан один раз как атрибут корневого элемента RSS:
<rss version="2.0" xmlns:myNS:"http://.......">
Как?

Это сообщение отредактировал(а) lankin - 28.10.2009, 11:54
PM MAIL   Вверх
diadiavova
Дата 28.10.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Это управляется атрибутом exclude-result-prefixes в корневом элементе XSLT. Включённые в его значение прификсы ведут себя так как ты описываешь, а те, которых там нет декларируются в корневом элементе(как тебе надо). Дефолтное поведение видмо от XSLT-процессора зависит. Попробуй объявить этот атрибут с пустым значением.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
NiТR0
  Дата 29.10.2010, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 28.6.2005

Репутация: нет
Всего: нет



Не знаю как у lankinа, а у меня не сработало.

Позволю себе немного расширить тему.
Тема избитая, но есть один важный ньюанс: в исходном XML нет namespaces.
Их не надо их вытаскивать из исходного XML, только создать новые namespaces в выходном XML.

Помогите пожалуйста решить задачу. Второй день мучаюсь.

Исходный XML
Note: Обратите внимание, что никаких namespaces нет
Код

<?xml version="1.0" encoding="utf-8"?>
<deploymentDescriptor>
...    
</deploymentDescriptor>


На выходе должен быть такой XML
Код

<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
...
</project>



XSLT
Код

<xsl:stylesheet version="2.0"    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="utf-8" indent="yes"/>
    <xsl:template match="/">
        <xsl:element name="project">
            <!-- Тут начинаются проблемы -->
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>


В документации сказано:

Example: Namespaces are not Attributes

It is not an error to write:

<xsl:attribute name="xmlns:xsl" namespace="file://some.namespace">
    http://www.w3.org/1999/XSL/Transform
</xsl:attribute>

However, this will not result in the namespace declaration xmlns:xsl="http://www.w3.org/1999/XSL/Transform" being output. Instead, it will produce an attribute node with local name xsl, and with a system-allocated namespace prefix mapped to the namespace URI file://some.namespace. This is because the namespace fixup process is not allowed to use xmlns as the name of a namespace node.


Но не сказано как добавить namespaces типа xmlns:xsi и xsi:schemaLocation.  smile 
PM MAIL   Вверх
diadiavova
Дата 29.10.2010, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



NiТR0, декларации пространств имен добавляются автоматически, если в документе присутствуют элементы, относящиеся к этим пространствам. Тебе надо объявить эти пространства в XSLT-документе и формировать нужные элементы придерживаясь тех префиксов, которые объявлены в XSLT. Остальное - задача хсл-процессора.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
NiТR0
Дата 29.10.2010, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 28.6.2005

Репутация: нет
Всего: нет



Да, вы правы.

Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns="http://maven.apache.org/POM/4.0.0"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <xsl:output method="xml" encoding="utf-8" indent="yes"/>

  <xsl:template match="/">
    <xsl:element name="project" >
      <xsl:attribute name="xsi:schemaLocation">http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd</xsl:attribute>
    </xsl:element>

    <!--
    <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"/>
    -->
  </xsl:template>
</xsl:stylesheet>


Большое спасибо
PM MAIL   Вверх
magelan
Дата 29.10.2010, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 7
Всего: 16



NiТR0,
будет время погуглите:
Код

<xsl:namespace-alias />


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0606 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.