2013-04-01 46 views
1

考虑下面的例子:XPath表达式帮助 - 多个表达式

<?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,并尝试了很多表达式,但我不能完全得到我需要的东西。的有两个ID患者

  1. 病人元节点

  2. 多名患者承认“好健康诊所”,在2012年1月:

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

感谢,

回答

1

我不能完全得到我所需要的。

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

:有两个ID

使用患者

  1. 患者元素节点。 。 。

    1. 多名患者承认 “好健康诊所”,在2012年1月:

    使用

    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 
    
+0

Dimitre非常感谢您的帮助。 – JoltX

+0

@ user2228233,不客气。 –