xpath:如何 select 具有多个子元素条件的父元素?

xpath: How to select Parent Element with conditions on Multiple Child Elements?

我正在使用 R 中的 'xml2' 库来读取 xml 文件以进行数据分析。

在下面的示例xml中,如何return子元素满足多个条件的父'row'元素?

我想要 select 'row' 元素 'year' 元素等于“2018”且 'vehicle_type' 元素等于 "scooter"?

<rows>
    <row>
      <vehicle_type>scooter</vehicle_type>
      <year>2018</year>
      <trip_duration>358</trip_duration>
    </row>
    <row>
      <vehicle_type>scooter</vehicle_type>
      <year>2019</year>
      <trip_duration>358</trip_duration>
    </row>
    <row>
      <vehicle_type>bicycle</vehicle_type>
      <year>2018</year>
      <trip_duration>358</trip_duration>
    </row>
</rows>

我用了'|'作为 AND 运算符的符号。但是,它 return 是一个错误。

这是我到目前为止尝试过的代码:

library(xml2)
library(selectr)
tripXML <- read_xml('trips-1.xml')

rows <- xml_find_all(tripXML, "//row[./year/text()='2018' | ./vehicle_type/text()='scooter']")

这是 RStudio 中的错误信息。

Error in xpath_search(x$node, x$doc, xpath = xpath, nsMap = ns, num_results = Inf) : xmlXPathEval: 3 object left on the stack

我想select这一行值:

<row>
      <vehicle_type>scooter</vehicle_type>
      <year>2018</year>
      <trip_duration>358</trip_duration>
</row>

希望大家帮帮忙,非常感谢

| 运算符不是 XPath 中的 and 运算符,而是 merge nodesets 运算符(Look here at W3Schools 一些灵感) .因此,要清理您的表达式,只需使用 and 运算符:

//row[year/text()='2018' and vehicle_type/text()='scooter']

然后你会得到你想要的输出。
(我还删除了前导 ./ 因为它们不是必需的)