我發現這個問題有很多類似的帖子,但沒有回答這個具體問題。我必須使用XPath 1.0。我沒有XSLT(或XQuery或其他任何東西),我不能使用XPath 2.0。我從一個軟件(Arbortext Styler)中執行這個XPath,我可以使用XPath 1.0從其他節點中選擇內容,但是在這種情況下XSLT不可用。另外,我無法控制源XML的結構。XPath 1.0:使用當前節點的父節點的屬性值來查找另一個匹配的節點
當我在<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>
我需要的是這樣的事情,但沒有電流()函數,它不是由軟件應用程序支持:
//procedure[@ref=current()/ancestor::procedure/@ref and @seq=current()/ancestor::procedure/@seq and @conf='A']/task/step
或者這樣的事情,但沒有對回報聲明:
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 Getting All Nodes that Have an Attribute that Matches Another Node
這也很有趣,但我的屬性值不是ID:Xpath: find an element value from a match of id attribute to id anchor
有什麼建議?
我應該補充一點,我發現很多用XSLT(和其他語言)或XPath 2.0解決這些問題的帖子,但這不是純粹用XPath 1.0來回答的。謝謝! –
你運氣不好。這不能在XPath 1.0中完成,因爲在謂詞中沒有辦法引用與謂詞所屬節點不同的節點。畢竟,這是'current()'的問題,並且變量在XSLT中解決。 – Tomalak
感謝@Tomalak,以確認我已經懷疑的事情。 –