After trying for over 8 hours, I am hoping someone can help me with this.
给定以下(简化的)图书XML:
我能够基于给定参数,使用以下XSL从书籍XML中提取任何部分(章节或段落):
我想象并尝试遍历XML树,并测试当前节点是否为祖先节点,类似于以下伪代码:
给定以下(简化的)图书XML:
<book>
<section name="A">
<chapter name="I">
<paragraph name="1"/>
<paragraph name="2"/>
</chapter>
<chapter name="II">
<paragraph name="1"/>
</chapter>
</section>
<section name="B">
<chapter name="III"/>
<chapter name="IV"/>
</section>
</book>
我能够基于给定参数,使用以下XSL从书籍XML中提取任何部分(章节或段落):
<xsl:param name="subSelectionXPath" required="yes" as="node()"/>
<xsl:template match="/">
<xsl:apply-templates select="$subSelectionXPath"/>
</xsl:template>
<xsl:template match="*">
<!-- output node with all children -->
<xsl:copy-of select="."/>
</xsl:template>
并使用值类似于
doc(filename)//chapter[@name='II']的参数$subSelectionXPath
导致输出:
<chapter name="II">
<paragraph name="1"/>
</chapter>
除此之外,我想实现的是将所选的XML片段包含在其祖先XML分支中,即:
<book>
<section name="A">
<chapter name="II">
<paragraph name="1"/>
</chapter>
</section>
</book>
我想象并尝试遍历XML树,并测试当前节点是否为祖先节点,类似于以下伪代码:
<xsl:if test="node() in $subSelectionXPath/ancestor::node()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:if>
我也尝试过使用xsl:key,但我担心我的XSLT知识到此为止了。有什么想法吗?