XPATH查询仅过滤某些属性的值

时间:2011-06-08 17:12:10

标签: xpath

我有以下XML:

<Library>
 <Item>
  <Field Name="Name">smooth</Field>
  <Field Name="File Type">mid</Field>
  <Field Name="File Size">60026</Field>
 </Item>
 <Item>
  <Field Name="Name">mid</Field>
  <Field Name="File Type">mp3</Field>
  <Field Name="File Size">4584972</Field>
 </Item>
</Library>

我想获取文件类型为“mid”的项目的所有项目名称。我的XPATH查询看起来像

/Library/Item/Field
    [
    @Name="Name" and 
    (../Field[@Name="File Type" and ../Field[.="mid"]])
    ]

但不幸的是,这两个项目都是从该查询中返回的。

smooth
mid

似乎不会针对仅具有“文件类型”属性的字段检查最后一个条件,而是检查所有字段。这导致返回名称“mid”,即使此项目的文件类型为“mp3”。

如何使用属性Name =“File Type”将“mid”的比较限制为字段的值?

有人可以建议我使用XPATH语法吗?

1 个答案:

答案 0 :(得分:25)

XPath谓词可以应用于任何地方,这将更直接:

/Library/Item[Field[@Name="File Type"] = "mid"]/Field[@Name="Name"]

你自己的表达是正确的

/Library/Item/Field[
  @Name="Name" 
  and ../Field[@Name="File Type"] = "mid"
]