用户正在输入相当复杂XPath
的查询数据库。他们将只使用一个固定的名称空间进行查询。当前,用户必须输入如下表达式:
//ns:tag1/ns:tag2 | //ns:tag3/ns:*[not(ns:tag2)]
但是,这种语法很快变得过于复杂,并且需要更长的时间才能输入。对于不太熟悉xpath的用户来说,这也很容易出错。用户最好输入XPath
不带名称空间的-
//tag1/tag2 | //tag3/*[not(tag2)]
对他们来说要容易得多!但是不适合我。我该如何处理这种表达?我确实知道需要插入的名称空间。有什么方法可以自动ns
在Xpath表达式的适当位置插入?我正在使用Python lxml
。还是可以设置默认名称空间?
请注意,这*[local-name() = 'entry']
是不可能的!
在python中我正在打电话
currentNode.xpath(query, {'ns':'http://myaddress.com/userns'})
这里currentNode
是一个etree.Element
。
XPath 2.0通过允许您指定默认名称空间来解决此问题,该名称空间将应用于查询中所有未加前缀的元素名称。不幸的是,XPath 2.0尚不适用于Python用户。
一种替代方法是在用户查询文档之前先对其进行转换,以使其不使用任何名称空间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句