Sur*_*ran 5 xml xslt xpath xslt-1.0
我一直在尝试编写一个 XPath 语句,该语句将选择节点的第一个前同级。那个兄弟节点应该有一个特定的节点作为它的子节点。
例如:
<a>
<c></c>
....
<b></b>
</a>
<a></a>
....
....
<a></a>
<a>
<b> start </b>
</a>
Run Code Online (Sandbox Code Playgroud)
在上面的 XML 中,如果我的上下文位于其 child 中a包含start文本的节点b。如何选择a子节点为 的前一个节点b?
我试过,preceding-sibling::*[b][1]但它只选择节点,a如果b它是它的第一个孩子。我也试过,preceding-sibling::*[1][b]但它只检查前面的第一个a节点,如果它不包含b,则测试失败。
注意:我使用的是 XSLT 1.0
谁能建议我一个解决方案?
提前谢谢!!
我相信:
preceding-sibling::*[b][1]
Run Code Online (Sandbox Code Playgroud)
或最好:
preceding-sibling::a[b][1]
Run Code Online (Sandbox Code Playgroud)
应该工作得很好。
我尝试过previous-sibling::*[b][1] 但它只选择节点a,如果b 是它的第一个孩子。
我不认为是这样。
像这样。(“第一个有<b>孩子的兄弟姐妹”):
preceding-sibling::a[b][1]
Run Code Online (Sandbox Code Playgroud)
或者这个(“第一个前面的兄弟姐妹,但前提是它有一个<b>孩子”):
preceding-sibling::a[1][b]
Run Code Online (Sandbox Code Playgroud)
多个谓词必须一个接一个为真。因此,这:
preceding-sibling::a[b and position() = 1]
Run Code Online (Sandbox Code Playgroud)
等价于第二个表达式,但不等价于第一个。
| 归档时间: |
|
| 查看次数: |
12913 次 |
| 最近记录: |