2013-07-25 2 views
0

Я хочу преобразовать XML в XML с помощью XSLT в JAVA. Как добавить имя пространства имен и его значение в XSLT-файле? Я пробовал много способов получить значение пространства имен, но не получил результат, которого ожидаю. Поэтому, пожалуйста, сделайте необходимое.Как добавить имя пространства имен и его значение в XSLT?

Это мой XML,

<?xml version="1.0" encoding="ISO-8859-1"?> 
<root xmlns="namespacename"> 
    <child>A</child> 
    <child>B</child> 
</root> 

XSLT-файл,

<?xml version="1.0" encoding="ISO-8859-1"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <xsl:element name="root" namespace="namespacename"> 
      <xsl:element name="child-one"> 
      <xsl:value-of select="root/child"/> 
      </xsl:element> 
     </xsl:element> 
    </xsl:template> 
    </xsl:stylesheet> 

мне нужен выходной файл XML, как это.

+0

Мне нужно добавить имя пространства имен и его значение в выходной XML, но просто они отображают элемент xml без пространства имен в --- Преобразование XML в XML с помощью xslt --- link. –

+0

Возможный дубликат [XSLT: добавление пространства имен в корневой элемент] (http://stackoverflow.com/questions/2686650/xslt-add-namespace-to-root-element) – Voicu

ответ

2

Если вы знаете пространство имен, просто добавьте его как пространство имен по умолчанию и напишите результат как литералы.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns="namespacename" 
       xmlns:i="namespacename" 
       exclude-result-prefixes="i"> 
    <xsl:template match="/"> 
    <root> 
     <child-one> 
     <xsl:value-of select="i:root/i:child"/> 
     </child-one> 
    </root> 
    </xsl:template> 
</xsl:stylesheet> 

Обратите внимание, что выражение XPath root/child обычно не учитывает пространство имен по умолчанию, так что вы должны объявить дополнительное пространство имен с префиксом (например, i) таким образом, путь становится i:root/i:child. Однако это также требует исключения пространства имен для результата с использованием exclude-result-prefixes="i".

+0

Привет, Obecker, спасибо за быстрый ответ, я проверил но это не сработает. Мне нужно пространство имен в корневом элементе. Благодарю. –

+0

Что значит «это не работает»? Результат, который я получаю, точно так же, как и ваш пример выше (помимо различной кодировки и отсутствия разрывов строк) – obecker

+0

Извините Obecker, проблема в моей версии браузера не в вашем коде, который (браузер) не поддерживает тег пространства имен. Большое спасибо. –

Смежные вопросы