是否可以使用行号和python lxml库生成XPath?
背景:我们在文档中有引用(不是xpath,但是它们的一部分),我希望找到对特定元素的所有引用(在特定行中)
enter code here
<root>
<element>
<name>Element1</name>
<contains>
<element>
<name>color</name>
<value-ref>/Colors/red</value-ref>
</element>
</contains>
</element>
<element>
<name>Colors</name>
<contains>
<element>
<name>red</name>
<value>0xFF0000</value>
</element>
<element>
<name>blue</name> <!-- the line I'd like to get an Xpath for -->
<value>0x0000FF</value>
</element>
</contains>
</element>
</root>
在XPath之外,我将在value-ref中创建一个表达式(这可以通过正则表达式完成)
答案 0 :(得分:1)
我现在用
etree.iter()
迭代所有元素,然后比较
element.sourceline
并将其与我正在寻找的那一行进行比较。现在我有了我正在寻找的元素,并且可以继续生成如上所述的路径。
感谢。
答案 1 :(得分:0)
您可能会执行以下操作来解析文档,创建文档中所有元素的映射及其基础行号(使用lxml Element
对象的sourceline
属性),然后工作从那里。但如果没有更多关于你想要做的事情的性质的解释,就很难具体化。
编辑:
我仍然不太明白这个问题,但是如果它有用,这里有一些使用lxml的Python代码,并显示示例文档中每个元素的位置路径(xpath)和行号:
import lxml.etree
doc = lxml.etree.parse('test.xml')
tree = lxml.etree.ElementTree(doc.getroot())
for e in tree.xpath('.//*'):
print(tree.getpath(e), '-', e.sourceline)