在py-dom-xpath中使用连字符的xpath无效
我现在在Debian 4.1.1-21系统上使用Python 2.7.2和py-dom-xpath。
一切都运行得很好,除了一个XML元素。
每当我尝试用像//AAA/BBB/CCC-DDD
这样的路径检查XML文档时,系统总是找不到这个路径。这个节点是唯一一个包含短横线-
的元素。我已经尝试过转义这个短横线,但没有成功。
我还尝试了//*[name()='CCC-DDD']
以及starts-with
和contains
这些方法。这个元素确实在XML中,而且拼写也没错。
我还试过一个在线XPath验证网站,在那里测试时一切都很顺利,甚至短横线也没问题。
任何帮助都非常感谢。
2 个回答
1
这可能也是某种编码问题。
这很可能是导致问题的原因之一。你可以通过在文件中查找每个短横线周围的内容,来确认这些短横线实际上是 U+002D ('-
'):
grep -o '...-...' input-file.xml
在你的脚本中也要这样做。不同的字符虽然看起来像短横线 (等等),但它们是无法互相匹配的。
1
使用 lxml 这个库可以吗?在这里,XPath 中的连字符是可以正常工作的:
import lxml.etree as ET
content = '''<root><AAA><BBB><CCC-DDD>xyz</CCC-DDD></BBB></AAA></root>'''
doc = ET.fromstring(content)
print(doc.xpath('//AAA/BBB/CCC-DDD'))
会得到
[<Element CCC-DDD at 0xb746f504>]