我有一个“ main.xml”文件,其中包括2个“ sub_x.xml”文件。包含行使用“ xpointer”仅指向/包含include 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>`
-------'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)
请注意,XPointerxpointer()
方案从未达到W3C Recommendation的地位(它仍然只是一个工作草案)。它已在libxml2(lxml后面的C库)中实现,但几乎没有其他地方。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句