给定以下 XML:
<package>
<node name="a">
<node name="b"/>
<node name="c"/>
<node name="d">
<node name="e"/>
<node name="f"/>
<node name="g">
<node name="h"/>
</node>
</node>
</node>
</package>
我基本上想在连接树的同时压平树name
每个父母的属性node
元素直到最后一个node
元素:
<package>
<node name="a-b"/>
<node name="a-c"/>
<node name="a-d-e"/>
<node name="a-d-f"/>
<node name="a-d-g-h"/>
</package>
到目前为止我所做的工作是正确生成所有内容的平面列表node
使用模板的元素和xsl:copy-of
:
<xsl:template match="//node">
<xsl:copy-of select="current()"/>
</xsl:template>
这给了我:
<package>
<node name="b"/>
<node name="c"/>
<node name="e"/>
<node name="f"/>
<node name="h"/>
</package>
但我不确定如何从这里正确继续。我的目的是扩展模板并使用xsl:attribute
and xsl:for-each
连接并修改属性:
<xsl:template match="node/@name">
<xsl:attribute name="name">
<xsl:for-each select="ancestor::node">
<xsl:if test="position() > 1">.</xsl:if>
<xsl:value-of select="@name"/>
</xsl:for-each>
</xsl:attribute>
</xsl:template>
但是,这仅打印node
的数据(如果有)。
我在这里缺少什么?
我有 XSLT 2.0 可用,我从中得到了灵感那么问题.