Xpath表达式帮助 - 多个表达式

时间:2013-04-01 02:56:19

标签: xpath expression element xmlnode

给出以下示例:

<?xml version="1.0" encoding="UTF-8"?>
<Patients>
  <patientRole>
    <id extension="996-756-495" root="2.16.840.1.113883.19.5"/>
    <id extension="775-756-495" root="2.16.840.1.113883.14.6"/>
    <patient>
      <name>
        <given>Henry</given>
        <family>Levin</family>
      </name>
      <administrativeGenderCode code="M" codeSystem="2.16.840.1.113883.5.1"/>
      <birthTime value="19320924"/>
    </patient>
    <providerOrganization>
      <id root="2.16.840.1.113883.19.5"/>
      <name>Good Health Clinic</name>
    </providerOrganization>
    <admissionTime value="2012030111:32"/>
  </patientRole>
  <patientRole>
    <id extension="65" root="2.16.840.1.113883.3.933"/>
    <patient>
      <name>
        <given>Paul</given>
        <family>Pappel</family>
      </name>
      <administrativeGenderCode code="M" codeSystem="2.16.840.1.113883.5.1"/>
      <birthTime value="19551217"/>
    </patient>
    <providerOrganization>
      <id extension="84756-11241-283-OPTD-3322" root="1.2.3.4.5.6.1.8.9.0"/>
      <name> Dr.med. Hans Topp-Glucklich</name>
    </providerOrganization>
    <admissionTime value="201201152200"/>
  </patientRole>
  <patientRole>
    <id extension="800001" root="2.16.840.1.113883.19.5"/>
    <patient>
      <name>
        <given>JEANNE</given>
        <family>PETIT</family>
      </name>
      <administrativeGenderCode code="F" codeSystem="2.16.840.1.113883.5.1"/>
      <birthTime value="19480105"/>
    </patient>
    <providerOrganization>
      <id root="2.16.840.1.113883.19.5"/>
      <name>Good Health Clinic</name>
    </providerOrganization>
    <admissionTime value="20120101T22:00"/>
  </patientRole>
</Patients>

我需要为每个人找到一个xpath表达式来执行以下操作。

我是XML / Xpath的新手并尝试了很多表达式,但我无法得到我需要的东西。

  1. 患有两个ids的患者的患者元素节点

  2. 2012年1月入住“健康诊所”的患者人数:

  3. 有了这个,我尝试了/Patients/patientRole[providerOrganization/name='Good Health Clinic' and substring(admissionTime/@value,1,6)='201201']生成它,但我正在处理的网站不会接受该提交,所以我想知道是否有另一个表达式会产生可能不那么复杂的表达式。< / p>

    谢谢,

1 个答案:

答案 0 :(得分:1)

  

我无法得到我需要的东西。

     
      
  1. 患有两个ids的患者的患者元素节点
  2.   

使用

/*/*[id[2]]/patient

。 。

  
      
  1. 2012年1月入住“健康诊所”的患者人数:
  2.   

使用

count(/*/*[starts-with(admissionTime/@value, '201201')]/patient)

基于XSLT的验证

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select="/*/*[id[2]]/patient"/>
  =====
  <xsl:value-of select=
  "count(/*/*[starts-with(admissionTime/@value, '201201')]/patient)"/>
 </xsl:template>
</xsl:stylesheet>

在提供的XML文档上应用此转换时:

<Patients>
    <patientRole>
        <id extension="996-756-495" root="2.16.840.1.113883.19.5"/>
        <id extension="775-756-495" root="2.16.840.1.113883.14.6"/>
        <patient>
            <name>
                <given>Henry</given>
                <family>Levin</family>
            </name>
            <administrativeGenderCode code="M" codeSystem="2.16.840.1.113883.5.1"/>
            <birthTime value="19320924"/>
        </patient>
        <providerOrganization>
            <id root="2.16.840.1.113883.19.5"/>
            <name>Good Health Clinic</name>
        </providerOrganization>
        <admissionTime value="2012030111:32"/>
    </patientRole>
    <patientRole>
        <id extension="65" root="2.16.840.1.113883.3.933"/>
        <patient>
            <name>
                <given>Paul</given>
                <family>Pappel</family>
            </name>
            <administrativeGenderCode code="M" codeSystem="2.16.840.1.113883.5.1"/>
            <birthTime value="19551217"/>
        </patient>
        <providerOrganization>
            <id extension="84756-11241-283-OPTD-3322" root="1.2.3.4.5.6.1.8.9.0"/>
            <name> Dr.med. Hans Topp-Glucklich</name>
        </providerOrganization>
        <admissionTime value="201201152200"/>
    </patientRole>
    <patientRole>
        <id extension="800001" root="2.16.840.1.113883.19.5"/>
        <patient>
            <name>
                <given>JEANNE</given>
                <family>PETIT</family>
            </name>
            <administrativeGenderCode code="F" codeSystem="2.16.840.1.113883.5.1"/>
            <birthTime value="19480105"/>
        </patient>
        <providerOrganization>
            <id root="2.16.840.1.113883.19.5"/>
            <name>Good Health Clinic</name>
        </providerOrganization>
        <admissionTime value="20120101T22:00"/>
    </patientRole>
</Patients>

评估Xpath表达式,并将此评估结果复制到输出中:

<patient>

   <name>

      <given>Henry</given>

      <family>Levin</family>

   </name>

   <administrativeGenderCode code="M" codeSystem="2.16.840.1.113883.5.1"/>

   <birthTime value="19320924"/>

</patient>
  =====
  2