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