2014-02-11 4 views
0

Можно ли хранить комментарии в XML при применении к нему XSLT?Сохранение комментариев при преобразовании XML с помощью XSLT

Пример (источник):

<rootNode> 
    <!-- My comment --><childElement>5</childElement> 
</rootNode> 

Результат образца после преобразования должны быть:

<newRoot> 
    <!-- My comment --><newChildElement>5</newChildElement> 
</newRoot> 

Как бы вы написать таблицу стилей?

+1

Проверьте это http://stackoverflow.com/questions/16407636/retain-comments-post-xslt-transform – Zyga

ответ

4

Это не является правильным XML синтаксис комментариев в вашем образце, но вы можете сохранить все узлы с

<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

затем добавить шаблоны подлежащие трансформации

<xsl:template match="childElement"> 
    <newChildElement> 
    <xsl:apply-templates select="@* | node()"/> 
    </newChildElement> 
</xsl:template> 

Мои предложения предполагают, ле, как

<rootNode> 
    <!-- My comment--><childElement>5</childElement> 
</rootNode> 

и результат в виде

<rootNode> 
    <!-- My comment--><newChildElement>5</newChildElement> 
</rootNode> 

Если childElement находится внутри комментария, то это гораздо сложнее.

+1

Вы правы. Комментарий XML был неправильным. Я редактировал свой вопрос. –

+0

@Robert, мое предложение отлично работает для ввода такого типа, первый шаблон копирует все типы узлов по уровню, а второй - для элемента, который вы хотите преобразовать. Узлы комментариев хранятся в первом шаблоне, как и другие узлы, которые вы не хотите изменять. –

+0

Это гораздо лучшее решение, чем ''. –

1

Довольно просто, если я понимаю вопрос правильно:

<xsl:template match="comment()"> 
    <xsl:copy/> 
</xsl:template> 
Смежные вопросы