我已经找到了许多与此问题类似的帖子,但是没有任何答案可以回答这个特定问题。我必须使用XPath 1.0。我没有可用的XSLT(或XQuery或其他任何东西),并且我不能使用XPath 2.0。我正在从一个软件(Arbortext Styler)内部执行此XPath,在其中可以使用XPath 1.0从其他节点中选择内容,但是XSLT在此上下文中不可用。另外,我无法控制源XML的结构。
当我处于的上下文中时<step>
,我需要能够匹配先前的过程/任务/步骤,该步骤的父过程与此步骤的父过程与当前过程的@ref和@seq匹配,并且字母“ A”作为@conf的值。
<document>
<topic>
<procedure ref="056" seq="01" conf="A">
<task>
<step>1. Blah Blah (056-01-A)</step>
</task>
</procedure>
<procedure ref="057" seq="02" conf="A">
<task>
<step>2. Blah blah (057-02-A)</step>
</task>
</procedure>
<procedure ref="057" seq="02" conf="B">
<task>
<step>2. Blah blah (057-02-B)</step>
</task>
</procedure>
<procedure ref="057" seq="03" conf="A">
<task>
<step>3. Blah blah (057-02-A)</step>
</task>
</procedure>
</topic>
</document>
我需要的是这样的东西,但是没有current()函数,软件应用程序不支持该函数:
//procedure[@ref=current()/ancestor::procedure/@ref and @seq=current()/ancestor::procedure/@seq and @conf='A']/task/step
或类似这样的东西,但是没有for in return语句:
for $ref in ancestor::procedure/@ref, $seq in ancestor::procedure/@seq return //topic/procedure[@ref=$ref and @seq=$seq and @conf='A']/task/step/text()
有人对XPath 1.0如何完全实现这一点有任何建议吗?请注意,该过程的位置无法进行硬编码。重复的引用可以在任意位置多次出现。此外,还要求以的起始上下文进行此匹配<step>
。
我怀疑我的问题的答案是无法解决,但我确实知道,如果可以解决,这就是寻找答案的地方!预先感谢所有考虑此问题的人。
这篇文章是类似的,但是搜索正在寻找起始上下文的子级:Xpath获取具有与另一个节点匹配的属性的所有节点
这也很有趣,但是我的属性值不是ID:Xpath:从ID属性与ID锚点的匹配中查找元素值
有什么建议?
正如Tomalak和Honza Hejzl所建议的那样,使用XPath 1.0无法做到这一点。感谢您的反馈。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句