对 xpath“以下”有点模糊;轴(如 xslt 中使用的)
<a>
<x/>
<m/>
<y/>
<m/>
</a>
在匹配“a”的模板内,我想(首先)匹配“y”之前的任何“m”,然后 单独“y”后面的任何“m”。
<xsl:apply-templates select="./m[following::y]"/>
是我想到的,但我无法让它工作,而且,此外,我看不到如何阻止与“m”匹配的模板应用于正常流程以及特定位置我想插入m相关的内容。
<a>
<x/>
<m/>
<y/>
<m/>
</a>
Inside a template that matches 'a', I want to match (first) any 'm's before 'y', and then
separately any 'm's after 'y'.
<xsl:apply-templates select="./m[following::y]"/>
is what I thought of, but I can't get it to work, and, further, I can't see how to prevent the template that matches on 'm' from being applied in the normal flow as well as in the particular place i want to insert the m-related content.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的模板看起来不错,但您确定要使用
以下
吗?例如,此模板:...应用于以下 XML:
...输出以下结果:
第一个不匹配 < /code> 因为
apply-templates
匹配following
包括按文档顺序位于上下文节点之后的所有节点,其中包括嵌套的
。第二个模板仅匹配兄弟姐妹。
为了完整起见,我将添加以下模板,该模板仅匹配那些紧随其后的兄弟节点是
的
节点>:根据上述 XML,此模板输出以下内容:
Your template looks OK, but are you sure you want to use
following
? For example, this template:...applied to the following XML:
...outputs the following result:
The first
apply-templates
matches<m>no match</m>
becausefollowing
includes all nodes that are after the context node in document order, which includes the nested<y/>
.The second template matches only siblings.
For completeness, I'll add the following template, which matches only those
<m>
nodes whose immediate following sibling is a<y>
:This template outputs the following, given the above XML: