XMLСохранение комментариев XML во XSL Transformations
<?xml-stylesheet type="text/xsl" href="script.xsl"?>
<elements>
<stack>
<name>Ray</name>
<status>0</status>
</stack>
<!-- Comment 1 -->
<things>
<!-- Comment 2 -->
<thing>
<color>red</color>
<!-- State Comment -->
<state>solid</state>
<!-- Weight Comment -->
<weight>45</weight>
<unit>34</unit>
<!-- Comment 3 -->
</thing>
</things>
<favs>
<stick>ready</stick>
<!-- Comment 4-->
</favs>
</elements>
ОЖИДАЕТСЯ ВЫХОД
<elements>
<stack>
<name>Ray</name>
<status>0</status>
</stack>
<!-- Comment 1 -->
<mainElements>
<!-- Comment 2 -->
<specialThing>
<!-- Weight Comment -->
<PropertyOne>45</PropertyOne>
<PropertyTwo>red</PropertyTwo>
<!-- State Comment -->
<PropertyThree>solid</PropertyThree>
</specialThing>
<!-- Comment 3 -->
</mainElements>
<favs>
<stick>ready</stick>
<!-- Comment 4-->
</favs>
</elements>
ТОКА XSL
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="things">
<mainElements>
<xsl:apply-templates select="thing"/>
</mainElements>
</xsl:template>
<xsl:template match="thing">
<specialThing>
<xsl:apply-templates select="weight"/>
<xsl:apply-templates select="color"/>
<xsl:apply-templates select="state"/>
</specialThing>
</xsl:template>
<xsl:template match="weight">
<PropertyOne>
<xsl:value-of select="."/>
</PropertyOne>
</xsl:template>
<xsl:template match="color">
<PropertyTwo>
<xsl:value-of select="."/>
</PropertyTwo>
</xsl:template>
<xsl:template match="state">
<PropertyThree>
<xsl:value-of select="."/>
</PropertyThree>
</xsl:template>
</xsl:stylesheet>
я не смог отступ выхода правильно, как я уже упоминал в выводе , Но главное, чего я хочу достичь, - это сохранить комментарии тегов, которые поддерживаются на выходе.
например: тег с именем weight переименовывается в «PropertyOne», и значение также сохраняется на выходе. Но комментарий выше того же отсутствует. Я хочу также оставить комментарий на выходе. Как я могу это достичь?
я предлагаю изменение 'предшествующее-родственный :: комментарий() [1] 't o 'previous-sibling :: node() [1] [self :: comment()]' или 'previous-sibling :: comment() [count (follow-sibling :: * [1] | current()) = 1] ', чтобы предотвратить случайное захват шаблонов комментариями другого элемента. – JLRishe
@ Daniel Большое спасибо :) –
@JLRishie Thanx для подсказки bro :) :) –