使用 xsl:key 测试前辈兄弟姐妹和匹配后代
我有一个问题,我相信我需要使用 xsl:key 进行分组来解决,但我不知道正确的语法。对于以下 XML,当我处理每个 元素时,我需要测试
该元素是否具有前导同级
< /code> 元素和具有相同 id 的后代 元素。
- “preceding-sibling”是指当前元素和
之间不能有,因此,标记为
的
应返回 false,而
< /code> 标记为
以及标记为
应该返回 true。
我所说的“后代”是指在
应返回 false。
之前不能有后代,因此
标记为
以及标记为 < 的元素后面的第一个
code>
- “preceding-sibling”是指当前元素和
或者该元素具有具有相同 id 的后代
元素和后代元素。
- 我所说的“后代”是指在
之前不能有后代。
- 我所说的“后代”是指在
对于以下 XML,我希望节点标记为 、
、和
返回 true。
<root>
<a><!-- # 0 -->
<b>
<c>
<markerStart id="a1"/>
<a> <!-- # 1 -->
<b>
<c>
<markeEnd id="a1"/>
</c>
</b>
</a>
<markerStart id="a2"/><!-- # 2a -->
<markerStart id="a3"/><!-- # 2b -->
<a><!-- # 2 -->
<b>
<c>
<markeEnd id="a2"/>
<a><!-- # 3 -->
<b>
<c>
<markeEnd id="a3"/>
</c>
</b>
</a>
</c>
</b>
</a>
<markerStart id="a5"/>
<a><!-- # 4 -->
<markerStart id="a4"/>
<b>
<c>
<markeEnd id="a4"/>
</c>
</b>
</a>
<a><!-- # 5 -->
<b>
<c>
<markeEnd id="a5"/>
</c>
</b>
</a>
</c>
</b>
</a>
</root>
我需要使用 XSL 1.0 来解决这个问题。任何帮助都非常感激。
I have a problem that I believe I need to use grouping using xsl:key to solve, but I am at a loss as to the correct syntax. For the following XML, when I process each <a/>
element I need to test to see if
the element has a preceding-sibling
<markerStart/>
element and a descendant</markerEnd>
element with the same id.- By "preceding-sibling" I mean that there must not be an
<a/>
between the current element and the<markerStart/>
, so the<a/>
marked<!-- # 5 -->
should return false, while the<a/>
marked<!-- # 1 -->
and the first<a/>
following the element marked<!-- # 2a -->
should return true. - By "descendant" I mean that there must not be an
<a/>
descendant before the<markerEnd/>
, so the<a/>
marked<!-- # 0 -->
and the first<a/>
following the element marked<!-- # 2b -->
should return false.
- By "preceding-sibling" I mean that there must not be an
OR the element has a descendant
<markerStart/>
element and a descendant</markerEnd>
element with the same id.- By "descendant" I mean that there must not be an
<a/>
descendant before the<markerEnd/>
.
- By "descendant" I mean that there must not be an
For the following XML, I would expect the nodes marked with <!-- # 1 -->
, <!-- # 2a -->
, and <!-- # 4 -->
to return true.
<root>
<a><!-- # 0 -->
<b>
<c>
<markerStart id="a1"/>
<a> <!-- # 1 -->
<b>
<c>
<markeEnd id="a1"/>
</c>
</b>
</a>
<markerStart id="a2"/><!-- # 2a -->
<markerStart id="a3"/><!-- # 2b -->
<a><!-- # 2 -->
<b>
<c>
<markeEnd id="a2"/>
<a><!-- # 3 -->
<b>
<c>
<markeEnd id="a3"/>
</c>
</b>
</a>
</c>
</b>
</a>
<markerStart id="a5"/>
<a><!-- # 4 -->
<markerStart id="a4"/>
<b>
<c>
<markeEnd id="a4"/>
</c>
</b>
</a>
<a><!-- # 5 -->
<b>
<c>
<markeEnd id="a5"/>
</c>
</b>
</a>
</c>
</b>
</a>
</root>
I need to used XSL 1.0 for this problem. Any help is more than appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
该样式表:
输出:
This stylesheet:
Output: