xpath - 根据关联列表中的值过滤 XPath 列表

标签 xpath

鉴于此 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/

相关文章:

java - 使用 XPath 从 WSDL XML 中提取对象列表

javascript - XPath .evaluate() 不返回任何内容

html - 使用 XPath : how to exclude text in nested elements

.net - 适用于 .NET 的 XPath 和 XSLT 2.0?

html - XPath 匹配@class 值和元素值?

java - 使用 SAX 解析器拆分 XML

python - 使用 python 和 xpath 选择多个值

java - 使用 Java 拆分 XML 文件

php - XPath:获取最近的标题元素(h1、h2、h3 等)

c# - 使用c#获取XML节点的内容