XML/XSL/Xpath的新手,我已经在这些板上搜索了一个看似简单的问题的答案,但也许我对XSL太陌生了,以便理解可能解决这个问题的一些答案。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文档例子
上述应该输出:
1
这是否有意义?
编辑:我还应该指定,我仅限于XSL 1.0
我有不祥的预感,这个问题将是其中的一个“如果你了解XSL和XPath,你就不会问这样的问题”,这基本上意味着它不能做完了。我得说,在程序和oop背景下,我很困惑,为什么有人会设计一种语言,答案是如此频繁,“不能这样做”。 – user1558945 2012-07-30 06:46:49
对于XSLT,我从来没有听说过“它不能完成”。在某些情况下,这肯定不太明显,但始终可以完成。 XSLT具有功能性背景,这就是为什么OOP /命令式背景的人看起来很奇怪。与过程相比,XSLT解决方案非常容易*的情况也很多*。几乎所有涉及[身份模板](http://www.xmlplease.com/xsltidentity) – 2012-07-30 14:48:31