当标签名包含大括号时XPath无效表达式

2 投票
1 回答
1406 浏览
提问于 2025-04-18 11:23

我想要获取的标签名是 {http://whitehatsec.com/XML-api-Vuln}description。每个标签前面都有这个白帽网站的引用,挺方便的。不过,使用 lxmlxpath 时,它似乎不太喜欢这个格式。我现在尝试用 vuln_root[0].xpath('//\{http://whitehatsec.com/XML-api-Vuln\}description') 来找到正确的节点,但 lxml 一直报错。

错误信息显示:

File "test.py", line 23, in <module> for s in vuln_root[0].xpath('//\{http://whitehatsec.com/XML-api-Vuln\}description'): File "lxml.etree.pyx", line 1509, in lxml.etree._Element.xpath (src/lxml/lxml.etree.c:50725) File "xpath.pxi", line 318, in lxml.etree.XPathElementEvaluator.__call__ (src/lxml/lxml.etree.c:146020) File "xpath.pxi", line 238, in lxml.etree._XPathEvaluatorBase._handle_result (src/lxml/lxml.etree.c:145028) File "xpath.pxi", line 224, in lxml.etree._XPathEvaluatorBase._raise_eval_error (src/lxml/lxml.etree.c:144883) lxml.etree.XPathEvalError: Invalid expression

我该如何解决这个糟糕的标签命名问题呢?谢谢!

1 个回答

2

这里最简单的方法就是直接映射命名空间。

el.xpath('//vuln:description',
    namespaces={'vuln': 'http://whitehatsec.com/XML-api-Vuln'})

撰写回答