如何从xml数据中读取特定元素?

时间:2015-08-05 13:28:26

标签: xml xslt xpath

以下是我的回复数据:

<Bundle xmlns="http://hl7.org/fhir">
   <id value="ffd821ee-f4d0-43fc-8eb1-df1d9bd63340"/>
   <meta>
      <lastUpdated value="2015-08-05T09:14:57.242-04:00"/>
   </meta>
   <type value="searchset"/>
   <base value="http://fhirtest.uhn.ca/baseDstu2"/>
   <total value="535"/>
   <link>
      <relation value="self"/>
      <url value="http://fhirtest.uhn.ca/baseDstu2/Patient?_format=xml"/>
   </link>
   <link>
      <relation value="next"/>
      <url value="http://fhirtest.uhn.ca/baseDstu2?_getpages=0bad92c1-cfe3-4a23-bd20-e24e854c16da&amp;_getpagesoffset=10&amp;_count=10&amp;_format=xml&amp;_pretty=true"/>
   </link>
</Bundle>

我需要阅读value标记的<link><url>属性value属性<relation>next

所以,我的预期输出是http://fhirtest.uhn.ca/baseDstu2?_getpages=0bad92c1-cfe3-4a23-bd20-e24e854c16da&amp;_getpagesoffset=10&amp;_count=10&amp;_format=xml&amp;_pretty=true

读取此内容的XPath表达式是什么?

1 个答案:

答案 0 :(得分:1)

答案取决于您用来评估XPath表达式的工具或库。如果在最外层元素上声明的默认名称空间自动可用于XPath引擎或被忽略,则以下操作将执行:

string(/Bundle/link[relation/@value = 'next']/url/@value)

如果不是这种情况,则需要将此命名空间URI与前缀(特定于工具或库)一起注册,然后在XPath表达式中使用前缀:

string(/fhi:Bundle/fhi:link[fhi:relation/@value = 'next']/fhi:url/@value)

由于您使用XSLT标记了此问题,或许您在XSLT中使用XPath?然后在xsl:stylesheet元素上声明此命名空间:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fhi="http://hl7.org/fhir">

或者,要完全忽略名称空间(不推荐),请使用

string(/*[local-name() = 'Bundle']/*[local-name() = 'link'][*[local-name() = 'relation']/@value = 'next']/*[local-name() = 'url']/@value)

在所有情况下,结果都是

http://fhirtest.uhn.ca/baseDstu2?_getpages=0bad92c1-cfe3-4a23-bd20-e24e854c16da&_getpagesoffset=10&_count=10&_format=xml&_pretty=true