处理不包含XML命名空间的XPath查询?

时间:2014-08-21 04:22:04

标签: python xml xpath namespaces

用户正在输入相当复杂的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'})

其中currentNodeetree.Element

1 个答案:

答案 0 :(得分:1)

XPath 2.0通过允许您指定应用于查询中所有未加前缀的元素名称的默认命名空间来解决此问题。不幸的是,XP用户并不容易使用XPath 2.0。

另一种方法是在用户查询文档之前对文档进行转换,以便它不使用任何名称空间。