這是我的 XML:
<f>
<a>10</a>
<a>2</a>
<a>4</a>
<a>13</a>
<b>55</b>
<b>4</b>
</f>
我正在嘗試匹配<b/>不等于的元素<a/>:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="b[. != //a]">
<xsl:text>found!</xsl:text>
</xsl:template>
</xsl:stylesheet>
但是,它不起作用。我相信,我的表達. != //a是錯誤的,因為//a只匹配<a/>. 什么是正確的表達方式?
這是一個測驗樣本,請不要建議解決此任務的其他可能方法。我只需要修復 XPath 運算式。
uj5u.com熱心網友回復:
大多數使用例如的XPath 用戶. != $sequence想要而不是not(. = $sequence)例如not(. = //a)當前.專案不等于任何a元素。
uj5u.com熱心網友回復:
執行此操作的智能(有效)方法是使用key:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="a" match="a" use="." />
<!-- other templates -->
<xsl:template match="b[not(key('a', .))]">
<!-- do something -->
</xsl:template>
</xsl:stylesheet>
為了進一步闡明您的嘗試無效的原因是您正在比較序列。這個比較被定義為回傳true
如果有一對原子值,一個在第一個運算元序列中,另一個在第二個運算元序列中,它們具有所需的大小關系。
IOW,您的運算式b[. != //a]回傳true任何b不等于至少一個的運算式a-在您的示例中,這意味著所有這些運算式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/493451.html
