lxml,xi:include和原始文件

时间:2013-04-02 03:17:28

标签: python xml lxml xinclude

我正在使用lxml来解析包含xi:include元素的文件,并且我使用xinclude()来解析包含。

给定一个元素,有没有办法识别元素最初出现的文件和源代码?

例如:

from lxml import etree
doc = etree.parse('file.xml')
doc.xinclude()
xpath_expression = ...
elt = doc.xpath(xpath_expression)
# Print file name and source line of `elt` location

1 个答案:

答案 0 :(得分:0)

xinclude扩展会将xml:base属性添加到顶级展开元素, 并且还为子节点更新了elt.base和elt.sourceline,因此:

print elt.base, elt.sourceline

会给你你想要的东西。

如果elt不是xinclude扩展的一部分,那么elt.base将指向基数 document('file.xml')和elt.sourceline将是该文件中的行号。 (注意,sourceline通常似乎实际上指向元素标记的行 结束,而不是它开始的行,如果元素在多行上,就像 验证错误消息通常指向发生错误的结束标记。 )

您可以找到初始的xincluded元素,并使用以下方法检查:

xels = doc.xpath( '//*[@xml:base] )
for x in xels: 
     print x.tag, x.base, x.sourceline
     for c in x.getchildren():
             print c.tag, c.base, c.sourceline