XML/XSL/Xpath 的新手,我已经在这些板上搜索了一个看似简单的问题的答案,但也许我对 XSL 太陌生,无法理解那里可能解决这个问题的一些答案。
我想选择一组与存储在文档中其他位置的不同节点值匹配的节点,以便:
<body>
<partlist>
<part>head</part>
<part>spleen</part>
<part>toe</part>
</partlist>
<parts>
<head>this is a head</head>
<spleen>this is a spleen</spleen>
<toe>big toe</toe>
<toe>big toe</toe>
<parts>
</body>
因此,假设我想计算所有“部分”,但我不知道“部分”节点名称,我希望 XPath expr 匹配一组名称等于另一组值的节点节点...
我对 XSL 很陌生,可以想象一个解决方案非常简单,但我有足够的经验来意识到期望 XSL 提供一个简单的解决方案肯定是错误的。
在我基于程序的无知中,这是我尝试过的:
<xsl:template match="/">
<xsl:apply-templates select="partlist/part">
<xsl:with-param name="parts" select="parts"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="part">
<xsl:param name="parts"/>
<xsl:value-of select="count($parts[.])"/>
</xsl:template>
但这是完全错误的。任何帮助深表感谢。
编辑:感谢您的回答,但我认为我没有被理解 - 错误是我的,因为我还不是很清楚......我需要的是一个单一的结果告诉我是否有任何节点匹配引用集的节点值...我认为会更改查询,因为我不是要输出计数列表,而是尝试将一个集合与一个集合进行匹配以计算总数...但是让我用 XSL 澄清,如果这样的事情是可能的.. 这是我上面的代码,稍作修改以明确我的意图:
<xsl:template match="/">
<xsl:apply-templates select="partlist/part">
<xsl:with-param name="parts" select="parts"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="part">
<xsl:param name="parts"/>
<xsl:if select="count($parts[.]) > 0">1</xsl:if>
</xsl:template>
以上应用于 xml doc 示例时应输出:
1
这有意义吗?
编辑:我还应该指定我仅限于 XSL 1.0