【发布时间】:2014-06-27 21:48:03
【问题描述】:
我要访问的标签名称是{http://whitehatsec.com/XML-api-Vuln}description。方便地,每个标签都以对白帽网站的可爱引用作为前缀。不幸的是,lxml 中的 xpath 不喜欢它。我目前正在尝试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
如何在我的 xpath 中绕过这个糟糕的标签命名?谢谢
【问题讨论】:
-
{namespace-uri}element-name是编写包含其命名空间的元素名称的一种方法(有时您还会看到这些在左大括号之前带有前导Q)。当您有xmlns:ns-prefix='namespace-uri'声明时,它与ns-prefix:element-name相同。 -
更多背景知识:“这是一项功能,而不是错误!” -- XML 名称空间让人们构建复合文档而不用担心冲突……因此您可以构建一个包含 XHTML 或 XForms 或其他任何内容以及白帽数据的文档,而不必担心任何标签名称是否相互冲突。将 XML 模板/宏语言与其他文档类型结合起来非常有用,因为命名空间会告诉您较大文档的编辑工具,标记内容是外来数据,应该不理会。span>