Python XpathEvaluator无命名空间

3

我需要编写一个动态函数,以查找ATOM xml文档子树上的元素。

为此,我已经编写了类似以下的代码:

    tree = etree.parse(xmlFileUrl)
    e = etree.XPathEvaluator(tree, namespaces={'def':'http://www.w3.org/2005/Atom'})
    entries = e('//def:entry')
    for entry in entries:
        mypath = tree.getpath(entry) + "/category"
        category = e(mypath)

上面的代码无法找到类别。

原因是getpath返回没有命名空间的XPath,而XPathEvaluator e()需要命名空间。

有没有办法使getpath返回带有命名空间的路径,或者允许XPathEvaluator接受未指定命名空间的路径(或以其他方式指定它)?

1个回答

2

用途:

*[local-name() = 'category']

或者,如果您想更精确一些

*[local-name() = 'category' and namespace-uri() = 'http://www.w3.org/2005/Atom']

或者简单地说:
def:category

我不明白那如何有助于解决问题。 - puntofisso
@puntofisso,看到最简单的方法就是尝试它。 - Dimitre Novatchev
好的,抱歉,我的评论有点突然(我还以为我没有发布它:P)。问题更多的是:如果我想动态构建该路径怎么办?有什么机会可以做到这一点吗?感谢您的帮助@dimitre-novachev。 - puntofisso
@puntofisso,XPath表达式(本身只是一个字符串)可以通过许多方式动态构建。需要知道XML文档是否有任何预先已知的信息(静态),以及XPath表达式“骨架”中必须动态生成哪些部分。由于当前问题完全没有提到这一点,因此最好您提出一个新的、单独的SO问题。 - Dimitre Novatchev
是的,没错。我缺少那个“whateverEvaluateMethod” :) 我想我正在使用一个没有太多XPath便利函数的库。 - puntofisso
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接