gpt4 book ai didi

python - 使用 Python ElementTree/ElementInclude 和 xpointer 访问包含的 XML 文件

转载 作者:数据小太阳 更新时间:2023-10-29 02:35:17 27 4
gpt4 key购买 nike

我有一个包含 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com