鉴于此XML
<DiagList>
<Diag id="1" icd="400"/>
<Diag id="2" icd="401"/>
<Diag id="3" icd="402"/>
<Diag id="4" icd="400"/>
</DiagList>
<ICDList>
<ICD id="400" description="First one"/>
<ICD id="401" description="Second one"/>
<icd id="402" description="Third one"/>
<ICDList>
Run Code Online (Sandbox Code Playgroud)
我想写一个Xpath查询,它将选择Diags,其中相关ICD的描述包含一些文本.
因此,例如,如果我指定了"st"的文本,那么我应该得到Diags"1"和"4".如果我指定"ir"的文本,我应该得到diags"1","3"和"4".
我试过了
/DiagList/Diag[contains(lcase(/ICDList/ICD[@id=/DiagList/Diag/@icd]/@description), 'st')]
Run Code Online (Sandbox Code Playgroud)
和变化.
我无法让它发挥作用.似乎它不喜欢对@icd的嵌套引用.
这是可能的吗?
谢谢你
Mik*_*lov -1
你缺少的是 的概念current()
。该函数引用整个 xpath 表达式的上下文节点,与 不同的是.
,它引用 xpath 表达式中的当前节点。
所以你可以使用:
/DiagList/Diag[contains(lcase(/ICDList/ICD[@id=current()/@icd]/@description), 'st')]
Run Code Online (Sandbox Code Playgroud)