我有一个包含 2 个“sub_x.xml”文件的“main.xml”文件。包含行使用“xpointer”仅指向/包含包含 xml 的特定标记。当我使用 ElementTree 来确定它是否正常工作时,它显示整个“子”xml 文件都被包含在内,而不仅仅是我想要的标签。我不确定我是否错误地使用了 xpointer 或者 ElementTree 或 ElementInclude 不支持这个。以下是文件:
-----'main.xml'---------
`<?xml version='1.0' encoding='utf-8'?>
<ModelInfo xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="sub_1.xml" xpointer="xpointer(//ModelInfo/Model)" parse="xml" />
<xi:include href="sub_2.xml" xpointer="xpointer(//ModelInfo/Model)" parse="xml" />
</ModelInfo>`
--------'sub_1.xml'------
`<?xml version="1.0" ?>
<ModelInfo>
<Model ModelName="glow">
<Variables>
<Variable Alias="glow_val" Input="False" Output="True" />
</Variables>
</Model>
</ModelInfo>`
--------'sub_2.xml'------
`<?xml version='1.0' encoding='utf-8'?>
<ModelInfo>
<Model ModelName="sirpwr_b_supply8v1">
<Variables>
<Variable Alias="sirpwr_a_supplyecu_Snsr8vIstat" Input="True" Output="False" />
</Variables>
</Model>
</ModelInfo>`
我希望“main.xml”在 ElementTree 中显示为:
`<?xml version='1.0' encoding='utf-8'?>
<ModelInfo xmlns:xi="http://www.w3.org/2001/XInclude">
<Model ModelName="glow">
<Variables>
<Variable Alias="glow_val" Input="False" Output="True" />
</Variables>
</Model>
<Model ModelName="sirpwr_b_supply8v1">
<Variables>
<Variable Alias="sirpwr_a_supplyecu_Snsr8vIstat" Input="True" Output="False" />
<Variable Alias="sirpwr_b_supply8v1_qstat" Input="False" Output="True" />
</Variables>
</Model>
</ModelInfo>`
我运行的加载 XML 文件和测试的脚本是:
`tree = ElementTree.parse('main.xml')
root = tree.getroot()
ElementInclude.include(root)
for element in root:
print element.tag`
xpointer 不工作,因为正在从“sub_x”xml 文件复制“ModelInfo”。
最佳答案
ElementInclude
不支持所有的 XInclude。 xpointer
<include>
上的属性元素被忽略。
使用 lxml 确实可以按照您想要的方式工作和 xinclude()
方法:
from lxml import etree
tree = etree.parse('main.xml')
tree.xinclude()
print etree.tostring(tree)
请注意 XPointer xpointer()
方案从未达到 W3C 推荐的状态(它仍然只是一个工作草案)。它已在 libxml2(lxml 背后的 C 库)中实现,但几乎无处可寻。
关于python - 使用 Python ElementTree/ElementInclude 和 xpointer 访问包含的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23684996/