GKo*_*tos 5 python xml xinclude elementtree xpointer
我有一个包含 2 个 'sub_x.xml' 文件的 'main.xml' 文件。包含行使用“xpointer”来仅指向/包含包含 xml 的特定标签。当我使用 ElementTree 来确定这是否正常工作时,它表明包含了整个“sub”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>`
Run Code Online (Sandbox Code Playgroud)
-------'sub_1.xml'------
`<?xml version="1.0" ?>
<ModelInfo>
<Model ModelName="glow">
<Variables>
<Variable Alias="glow_val" Input="False" Output="True" />
</Variables>
</Model>
</ModelInfo>`
Run Code Online (Sandbox Code Playgroud)
-------'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>`
Run Code Online (Sandbox Code Playgroud)
我希望 '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>`
Run Code Online (Sandbox Code Playgroud)
我正在运行以加载 XML 文件并进行测试的脚本是:
`tree = ElementTree.parse('main.xml')
root = tree.getroot()
ElementInclude.include(root)
for element in root:
print element.tag`
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
请注意,XPointerxpointer()方案从未达到 W3C 建议的状态(它仍然只是一个工作草案)。它已在 libxml2(lxml 背后的 C 库)中实现,但几乎没有在其他地方实现。
| 归档时间: |
|
| 查看次数: |
2458 次 |
| 最近记录: |