在py-dom-xpath中使用连字符的xpath无效

3 投票
2 回答
1556 浏览
提问于 2025-04-17 13:00

我现在在Debian 4.1.1-21系统上使用Python 2.7.2和py-dom-xpath
一切都运行得很好,除了一个XML元素。

每当我尝试用像//AAA/BBB/CCC-DDD这样的路径检查XML文档时,系统总是找不到这个路径。这个节点是唯一一个包含短横线-的元素。我已经尝试过转义这个短横线,但没有成功。

我还尝试了//*[name()='CCC-DDD']以及starts-withcontains这些方法。这个元素确实在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>]

撰写回答