0

我有一个这样的 XML:

<document>
  <FileDetails>
  </FileDetails>
  <Clients>
    <Client>
      <ClientDetails>
        <clientName>xxxx</clientName>
        <clientContact>xxxx</clientContact>
        <clientContactEmail>info@xxxx.com</clientContactEmail>
        <clientTelephone>xxxx</clientTelephone>
      </ClientDetails>
      <properties>
        <Property>
          <propertyid>Foo1</propertyid>
          <category>Commercial</category>
        </Property>
        <Property>
          <propertyid>Foo2</propertyid>
          <category>Residential</category>
        </Property>
        <Property>
          <propertyid>Foo3</propertyid>
          <category>Residential</category>
        </Property>
      </properties>
    </Client>
  </Clients>
</document>

如何检索具有名为“propertyid”且值为 Foo1 的子对象的属性?

4

4 回答 4

0

我只为 html 文档使用过 xpath,不确定是否同样适用于 xml。

我会做一些类似的事情:

//Property/propertyid[@text() = "Foo1"]/..
于 2013-02-06T08:53:57.807 回答
0

使用祖先

//Property/propertyid[text()='Foo1']/ancestor::Property

这将为您提供最近的祖先属性元素。

于 2013-02-06T09:20:34.930 回答
0

最直接的方法如下:

 //Property[propertyid = 'Foo1']
于 2013-02-06T09:24:49.923 回答
0

您可以在 xpath 表达式中的任何级别使用谓词

//Property[propertyid = 'Foo1']

将为您提供具有属性id子的元素,其值恰好是Foo1,如果您想要子字符串匹配,您可以使用嵌套谓词

//Property[propertyid[contains(., 'Foo1')]]

如果您知道每个Property人都会有一个 propertyid孩子,那么您可以使用更简单的

//Property[contains(propertyid, 'Foo1')]

但是对于可能有多个子元素的其他类似情况,嵌套方法 withcontains(., '...')更安​​全(特别是,contains(x, '...')仅检查第一个子元素x,而x[contains(., '...')]检查所有子元素)。

于 2013-02-06T09:28:45.147 回答