2

假设我有一堆

<item price='n' sold='m'>
...
</item>

我想做每件商品的售价*。我在尝试

'//item/(@price * @sold)' 

从 python 中的 lxml 内部,但我不断收到错误'Invalid Expression'。xmllint 命令也会发生同样的情况。但是相同的查询在 Oxygen xml 编辑器中有效。

我该如何进行这项工作?

4

2 回答 2

5

您使用的 XPath 表达式需要 XPath 2.0。(您可以通过将 XPath 版本设置为 1.0 并再次尝试查询来在 Oxygen 中验证这一点。)我认为 lxml 不支持 XPath 2.0。

如果您无法获得支持 XPath 2.0 的库,那么与其尝试在 XPath 中完成所有操作,您需要:

  • 选择 XPath 中的<item>元素,例如使用 XPath 表达式//item
  • 在 Python 中循环遍历这些元素
  • 在每个<item>元素的上下文中,计算 XPath 表达式@price * @sold
于 2013-02-19T14:02:14.653 回答
-1

可以在 XPath 2.0 中进行计算,因为我已经更正了!

如果您想选择价格低于或等于售价乘以 2 的所有商品,这是可能的。见下: http ://en.wikipedia.org/wiki/XPath#Number_functions

于 2013-02-19T14:00:20.150 回答