我有一个递归XInclude语句的问题。我有一个主文件,其中XInclude存在于另一个文件中。在包含的文件中还有更多的XInclude语句。
我用python和lxml库解析我的XML文件。因此,不幸的是,我只得到了以下内容。我的错误在哪里?或者递归使用XInlcude是不可取的?
谢谢你的帮助。
主文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<TEST Id = "MyTest" xmlns:xi="http://www.w3.org/2001/XInclude" >
<FOO>
<BAR/>
</FOO>
<xi:include xpointer="element(/1/1)" href="Test_1.xml"/>
</TEST>第一个包含
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<TEST.INCLUDE xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="Test_1_1.xml" xpointer="element(/1/1)"/>
<xi:include href="Test_1_2.xml" xpointer="element(/1/1)"/>
<xi:include href="Test_1_3.xml" xpointer="element(/1/1)"/>
</TEST.INCLUDE>第二个包含(本例中Test_1_1.xml、Test_1_2.xml和Test_1_3.xml是相同的)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<TEST.INCLUDE>
<FOO Id="Test_1_1">
<BAR/>
</FOO>
</TEST.INCLUDE> 我使用以下python代码得到的结果。
import lxml
from lxml import etree
import xml.etree.ElementTree as ET
XMLParser = lxml.etree.XMLParser()
XMLFile = lxml.etree.parse('Model.xml', parser=XMLParser)
XMLFile.xinclude()
XMLFile.write(f"Model_xinclude.xml",method="xml",pretty_print=True)结果
<TEST xmlns:xi="http://www.w3.org/2001/XInclude" Id="MyTest">
<FOO>
<BAR/>
</FOO>
<FOO Id="Test_1_1">
<BAR/>
</FOO>
</TEST>但是我已经预料到并希望得到以下结果
<TEST xmlns:xi="http://www.w3.org/2001/XInclude" Id="MyTest">
<FOO>
<BAR/>
</FOO>
<FOO Id="Test_1_1">
<BAR/>
</FOO>
<FOO Id="Test_1_2">
<BAR/>
</FOO>
<FOO Id="Test_1_3">
<BAR/>
</FOO>
</TEST>发布于 2020-09-10 11:38:37
在主文件(Model.xml)中,您有以下include元素:
<xi:include xpointer="element(/1/1)" href="Test_1.xml"/>它将只选择Test_1.xml中的第一个include元素。
要获得想要的结果,您需要在主文件中包含以下内容:
<xi:include xpointer="element(/1/1)" href="Test_1.xml"/>
<xi:include xpointer="element(/1/2)" href="Test_1.xml"/>
<xi:include xpointer="element(/1/3)" href="Test_1.xml"/>这可以通过使用xpointer()方案来简化,该方案只需要一行:
<xi:include xpointer="xpointer(/TEST.INCLUDE/*)" href="Test_1.xml"/>https://stackoverflow.com/questions/63816469
复制相似问题