【问题标题】:Processing XPath queries that don't include XML namespaces?处理不包含 XML 命名空间的 XPath 查询?
【发布时间】: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'})

其中currentNodeetree.Element

【问题讨论】:

  • 你将用户的查询传递给lxml中的什么函数?
  • 好点,我将它们发送到currentNode.xpath(query, {'ns':'http://myaddress.com/userns'})

标签: python xml xpath namespaces


【解决方案1】:

XPath 2.0 通过允许您指定一个默认名称空间来解决这个问题,该名称空间应用于查询中的所有无前缀元素名称。不幸的是,Python 用户不容易使用 XPath 2.0。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多