鉴于此 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>
我想编写一个 Xpath 查询,该查询将选择相关 ICD 描述包含的 Diags
一些文字。
因此,例如,如果我指定了“st”的文本,那么我应该得到 Diags“1”和“4”。如果我指定“ir”的文本,我应该得到诊断“1”、“3”和“4”。
我试过
/DiagList/Diag[contains(lcase(/ICDList/ICD[@id=/DiagList/Diag/@icd]/@description), 'st')]
和变化。
我一直无法让它工作。似乎它不喜欢对@icd 的嵌套引用。
这是可能的吗?
谢谢
本
最佳答案
使用 :
/*/DiagList
/*
[@icd
=
/*/ICDList/*
[contains(@description, $pText)]
/@id
]
哪里
$pText
必须替换为所需的字符串文字。基于 XSLT 的验证 :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my ">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="pText" select="'ir'"/>
<xsl:template match="/">
<xsl:copy-of select=
"/*/DiagList
/*
[@icd
=
/*/ICDList/*
[contains(@description, $pText)]
/@id
]"/>
</xsl:template>
</xsl:stylesheet>
当此转换应用于提供的 XML 文档时 (更正为格式正确):
<t>
<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>
</t>
选择想要的节点并将其复制到输出 :
<Diag id="1" icd="400" />
<Diag id="3" icd="402" />
<Diag id="4" icd="400" />
当我们在上面的变换中设置 :
<xsl:param name="pText" select="'st'"/>
然后再次产生了想要的结果:
<Diag id="1" icd="400" />
<Diag id="4" icd="400" />
关于xpath - 根据关联列表中的值过滤 XPath 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8087507/