我正在尝试使用XSLT转换XML。但整个节点FKN-VERS为空。可以任何人建议请.. 我的xml代码是:
<?xml version="1.0" encoding="UTF-8"?>
<Versions>
<FirstVersion >
<Element OriginalName="fin_Test" >
<ElementClass Name="TEST"/>
<ElementAttributes/>
</Element>
<Type Name="TEST" />
<LifecycleState Name="OPe" Lifecycle="STANDARD" />
<Predecessors>
<Predecessor Variant="BASE_RETEST1" Revision="1"/>
</Predecessors>
</FirstVersion>
</Versions>
我的xsl转换代码是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/Versions[FirstVersion/Type/@Name='TEST']">
<DATA>
<xsl:attribute name="ID">10</xsl:attribute>
<FKN-VERS>
<FKN-VERS>
<xsl:for-each select=" Versions/FirstVersion/Predecessors">
<VERS-LABEL>
<xsl:value-of select="concat(@Variant, ';',@Revision)"/>
</VERS-LABEL>
</xsl:for-each>
</FKN-VERS>
</FKN-VERS>
</DATA>
</xsl:template>
</xsl:stylesheet>
输出:
<ID="10">
<FKN-VERS>
<FKN-VERS/>
</FKN-VERS>
</DATA>
答案 0 :(得分:1)
更改for-each
声明,
<xsl:for-each select=" Versions/FirstVersion/Predecessors">
到
<xsl:for-each select="FirstVersion/Predecessors/Predecessor">
因为当包含的模板匹配时,当前节点已经位于Versions
元素,并且您希望迭代Predecessor
元素,而不是包含Predecessors
元素。
答案 1 :(得分:1)
在我看来,你的选择路径开始一个节点太高,并且结束一个节点太高。试试这个:
<xsl:for-each select="FirstVersion/Predecessors/Predecessor">
<VERS-LABEL>
<xsl:value-of select="concat(@Variant, ';',@Revision)"/>
</VERS-LABEL>
</xsl:for-each>