1

给定以下示例:

<?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. 具有两个 id 的患者的患者元素节点

  2. 2012年1月「好康诊所」收治病人数:

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

谢谢,

4

1 回答 1

1

我不能完全得到我需要的东西。

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

使用

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

. . .

  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
于 2013-04-01T04:28:20.580 回答