【发布时间】:2014-08-21 04:22:03
【问题描述】:
用户正在输入相当复杂的XPaths 来查询数据库。
他们只会为查询使用一个固定的命名空间。目前用户必须输入如下表达式:
//ns:tag1/ns:tag2 | //ns:tag3/ns:*[not(ns:tag2)]
但是这种语法很快就会变得过于复杂,并且需要更长的时间才能输入。对于不太熟悉 xpath 的用户来说,它也很容易出错。理想情况下,用户会在没有命名空间的情况下输入XPath --
//tag1/tag2 | //tag3/*[not(tag2)]
对他们来说容易多了!但不适合我。我该如何处理这种表达方式?我确实知道需要插入的名称空间。有没有办法在 Xpath 表达式的适当位置自动插入ns?我正在使用 Python lxml。或者我可以设置一个默认命名空间吗?
注意*[local-name() = 'entry']在这里是不可能的!
编辑
我在 python 中调用
currentNode.xpath(query, {'ns':'http://myaddress.com/userns'})
其中currentNode 是etree.Element。
【问题讨论】:
-
你将用户的查询传递给
lxml中的什么函数? -
好点,我将它们发送到
currentNode.xpath(query, {'ns':'http://myaddress.com/userns'})
标签: python xml xpath namespaces