簡體   English   中英

帶有遞歸 XInclude 語句的 XML

[英]XML with recursive XInclude statements

我的遞歸 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>

在主文件 (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"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM