2013-11-30 7 views
1

Может кто-нибудь помочь. Я переименовываю узлы, но теряю форматирование. Мой XML:Специальные символы в XML с преобразованием XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<root>  
<demo></demo> 
</root> 

и я преобразую его с помощью XSLT ниже. Выход есть всегда:

<?xml version="1.0" encoding="UTF-8"?> 
<root>  
<description pstyle="description"></description> 
</root> 

Но правильный выход потребность XML быть:

<?xml version="1.0" encoding="UTF-8"?> 
<root>  
<description aid:pstyle="description"></description> 
</root> 

Есть ли способ, что это не случилось бы с преобразованием XSLT?

Мой XSLT является:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="no"/> 
<xsl:template match="@* | node()"> 
      <xsl:copy> 
       <xsl:apply-templates select="@* | node()"/> 
      </xsl:copy> 
    </xsl:template> 
    <xsl:template match="demo"> 
<description aid:pstyle="description"><xsl:apply-templates select="@*|node()"/> 
</description> 
</xsl:template> 
</xsl:stylesheet> 

Заранее спасибо за вашу помощь.

+0

Вам необходимо включить, по крайней мере, корневые узлы XML и корневого узла и следующие теги форматирования вашего XSLT. В противном случае мы можем только догадываться, что случилось. –

+0

Маркус, я исправил свой вопрос выше. – eoglasi

+4

Ваша таблица стилей неполна.Я не вижу объявления пространства имен для префикса «помощь:». Это не правильно сформированный XML, и поэтому он не может быть таблицей стилей, которую вы пытаетесь использовать. Если ваш процессор принимает вышеуказанный экземпляр как XML, то у вас есть несоответствующий процессор. –

ответ

4

Предполагая, что вы на самом деле хотите хорошо сформированный вывод XML ...

Вашего вклад XML:

<?xml version="1.0" encoding="UTF-8"?> 
<root>  
    <demo></demo> 
</root> 

Учитывая ваш XSLT модифицированного определить префикс пространства имен aid:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="demo"> 
    <description xmlns:aid="http://example.com/aid" 
       aid:pstyle="description"> 
     <xsl:apply-templates select="@*|node()"/> 
    </description> 
    </xsl:template> 
</xsl:stylesheet> 

W плохо изготовлять это хорошо сформированный выходной XML:

<?xml version="1.0" encoding="UTF-8"?> 
<root>  
    <description xmlns:aid="http://example.com/aid" aid:pstyle="description"/> 
</root> 

Обновление на комментарий OP в:

Это работает, но я могу иметь выход XML без Xmlns: помощь =» example.com/aid "; в описании тега?

Ваш комментарий вместе с вашим вопросом названием «Специальные символы в XML с преобразованием XSLT» предполагают, что вы не понимаете XML пространства имен. Символы aid: перед атрибутом pstyle не являются специальными символами. Они являются префиксом пространства имен. Пространства имен не требуются в XML, но если вы собираетесь использовать префикс пространства имен, такой как aid:, вы должны определить его (например, xmlns:aid="http://example.com/aid") для документа namespace-valid. Для объяснения пространства имен и допустимых пространств имен в общем случае см. Namespaces in XML 1.0.

Если вы используете префикс aid: без его определения, документ не будет иметь пространство имен. XSLT способен выводить документ, не относящийся к пространству имен, или даже не правильно сформированный XML, но почти никогда не существует законных оснований для этого. Обратите внимание, что определение может возникнуть на root, если это вам больше по душе.

+0

Это работает, но могу ли я получить xml без xmlns: aid = "http://example.com/aid" в описании тега? – eoglasi

+1

Спасибо за ваш ответ, и да, я знаю, что я создал неправильный вопрос. Тем не менее ваше решение решает мою проблему. – eoglasi

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