【发布时间】:2020-07-09 06:45:33
【问题描述】:
有没有办法在lxml 中使用带有.xpath 方法的for 表达式?
如果我有类似的 xml
<DataGrid>
<row>
<description>Map to blank.</description>
<rule />
</row>
<row>
<description>The Vehicle Identification Number.</description>
<rule>PRINT VIN</rule>
</row>
</DataGrid>
有没有办法直接使用lxml运行这个xpath表达式
for $var in //DataGrid/row return concat($var/rule/text(), '%%', $var/description/text())
我希望得到一个包含两个字符串的列表:["'%%Map to blank.'", "'PRINT VIN%%The Vehicle Identification Number.'"]
运行 root.xpath('for $var in //DataGrid/row return concat($var/rule/text(), '%%', $var/description/text())') 会导致此回溯
---------------------------------------------------------------------------
XPathEvalError Traceback (most recent call last)
<ipython-input-84-a37be007325f> in <module>
----> 1 root.xpath("for $var in //DataGrid/row return concat($var/rule/text(), '%%', $var/description/text())")
src/lxml/etree.pyx in lxml.etree._ElementTree.xpath()
src/lxml/xpath.pxi in lxml.etree.XPathDocumentEvaluator.__call__()
src/lxml/xpath.pxi in lxml.etree._XPathEvaluatorBase._handle_result()
XPathEvalError: Invalid expression
或者 - lxml 不是适合这个的库吗?或者是否有任何其他库可以直接在 XML 文件上运行这些 xpath 表达式?
【问题讨论】:
-
你的问题到底是什么?
-
如何获得我想要的输出?我无法在 XML 上运行 xpath 表达式。它适用于简单的表达式,但像 ForExpr 这样的东西似乎不起作用。
-
你用python for循环试过了吗
-
不确定这有什么帮助。不能使用 lxml 运行任意 xpath 1.0 表达式吗?文档中没有提到任何此类情况。我的用例涉及让用户输入 xpath 表达式(他们可以输入任何表达式)
-
lxml 支持 XPath 1.0。在 XPath 2.0 中添加了
for表达式。
标签: python python-3.x xpath lxml