2013-04-01 48 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,不客氣。 –