【发布时间】:2018-03-12 19:50:53
【问题描述】:
我正在尝试通过使用 XSLT 组合属性的值来展平嵌套 XML 元素的树。例如,如果我有以下输入:
<node value="a">
<node value="b">
<node value="c">
<node value="d">
</node>
</node>
<node value="e">
<node value="f">
</node>
<node value="g">
<node value="h">
</node>
</node>
</node>
</node>
</node>
那么这些将是我希望能够得到的“扁平化”结果:
a/b/c/d
a/b/e/f
a/b/e/g/h
我目前所能实现的只是在具有“value”属性的节点“node”的最深嵌套出现处输出记录:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:csv="csv:csv">
<xsl:output method="text" encoding="utf-8" />
<xsl:template match="text()|@*"/>
<xsl:template match="node[@value]">
<xsl:if test="not(descendant::node[@value])">
<xsl:value-of select="@value"/>
<xsl:text>
</xsl:text>
</xsl:if>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
您可能从我的描述和xsl:if 测试中了解到,一个潜在的复杂情况是“node”元素的某些实例可能没有“value”属性,因此必须明确检查。如何更新此样式表以达到预期的效果?
【问题讨论】: