【问题标题】:XPATH query to filter values on certain attributes onlyXPATH 查询仅过滤某些属性的值
【发布时间】:2011-09-11 01:46:01
【问题描述】:

我有以下 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”。

如何将与“mid”的比较限制为具有属性 Name="File Type" 的字段的值?

谁能给我推荐一个按预期工作的 XPATH 语法?

【问题讨论】:

    标签: xpath


    【解决方案1】:

    XPath 谓词可以在任何地方应用,这样会更直接:

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

    你自己的表达是正确的

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      • 2016-07-26
      相关资源
      最近更新 更多