任何解析XML的简单工具都可以在同一个文件中包含多个元素

任何解析XML的简单工具都可以在同一个文件中包含多个元素,xml,xmllint,xinclude,Xml,Xmllint,Xinclude,想要使用一个简单的工具(现在,我使用“xmllint”)来解析xml文件,它在多个级别上使用“xinclude”。一个文件中有多个元素 然后我的应用程序可以解析结果xml文件ea(其中没有xinclude) 命令行类似于 xmllint input.xml --xinclude --output output.xml --noent 找到这篇文章: 如果您尝试了parse=“text”,则它无法正常工作 input.xml <?xml version="1.0"?> <Ta

想要使用一个简单的工具(现在,我使用“xmllint”)来解析xml文件,它在多个级别上使用“xinclude”。一个文件中有多个元素

然后我的应用程序可以解析结果xml文件ea(其中没有xinclude)

命令行类似于

xmllint input.xml --xinclude --output output.xml --noent
找到这篇文章:

如果您尝试了parse=“text”,则它无法正常工作

input.xml

<?xml version="1.0"?>
<Tag1 name="nameABC" xmlns:xi="http://www.w3.org/2003/XInclude">
  <Setting name="setting1">111</Setting>
  <xi:include href="shared.3.xml" parse="text" />
</Tag1>
<Setting name="shared_3___1">3_1</Setting>
<Setting name="shared_3___2">3_2</Setting>
<Setting name="shared_3___3">3_3</Setting>

111
shared.3.xml

<?xml version="1.0"?>
<Tag1 name="nameABC" xmlns:xi="http://www.w3.org/2003/XInclude">
  <Setting name="setting1">111</Setting>
  <xi:include href="shared.3.xml" parse="text" />
</Tag1>
<Setting name="shared_3___1">3_1</Setting>
<Setting name="shared_3___2">3_2</Setting>
<Setting name="shared_3___3">3_3</Setting>
3\u 1
3_2
3_3
xmllint结果是

<?xml version="1.0"?>
<Tag1 xmlns:xi="http://www.w3.org/2003/XInclude" name="nameABC">


  <Setting name="setting1">111</Setting>

  &#xD;
&#xD;
  &lt;Setting name="shared_3___1"&gt;3_1&lt;/Setting&gt;&#xD;
  &lt;Setting name="shared_3___2"&gt;3_2&lt;/Setting&gt;&#xD;
  &lt;Setting name="shared_3___3"&gt;3_3&lt;/Setting&gt;&#xD;


</Tag1>
<?xml version="1.0"?>
<Tag1 xmlns:xi="http://www.w3.org/2003/XInclude" name="nameABC">

  <Setting name="setting1">111</Setting>

  <Setting name="shared_3___1">3_1</Setting>
  <Setting name="shared_3___2">3_2</Setting>
  <Setting name="shared_3___3">3_3</Setting>
</Tag1>

111

;

;
Setting name=“shared_3__1”3_1/Setting
;
Setting name=“shared_3__2”3_2/Setting
;
Setting name=“shared_3__3”3_3/Setting
;
我的期望是

<?xml version="1.0"?>
<Tag1 xmlns:xi="http://www.w3.org/2003/XInclude" name="nameABC">


  <Setting name="setting1">111</Setting>

  &#xD;
&#xD;
  &lt;Setting name="shared_3___1"&gt;3_1&lt;/Setting&gt;&#xD;
  &lt;Setting name="shared_3___2"&gt;3_2&lt;/Setting&gt;&#xD;
  &lt;Setting name="shared_3___3"&gt;3_3&lt;/Setting&gt;&#xD;


</Tag1>
<?xml version="1.0"?>
<Tag1 xmlns:xi="http://www.w3.org/2003/XInclude" name="nameABC">

  <Setting name="setting1">111</Setting>

  <Setting name="shared_3___1">3_1</Setting>
  <Setting name="shared_3___2">3_2</Setting>
  <Setting name="shared_3___3">3_3</Setting>
</Tag1>

111
3_1
3_2
3_3
有什么想法吗??? 非常感谢


无法将多个标记(“设置”)放在一个包装器标记(“设置”)中,因为一个文件可以包含在多个文件中。我不想解析这么多宫殿中的“设置”。

根据工具箱的外观,可能会有所帮助。它是XInclude在XSLT中的实现,这意味着您可以通过运行XIPr XSLT代码来处理包含XInclude的XML。本质上,您可以将包含XInclude的XML转换为解析这些包含内容的XML

请记住,XIPr使用XSLT2.0,这意味着如果只有XSLT1.0处理器,就无法使用它

如果您对XIPr本身有任何问题,请使用其GitHub页面讨论这些问题。谢谢。

尝试将input.xml中的parse=“text”替换为parse=“xml”

当parse=“xml”(顺便说一句,这是默认值)时,将获取引用的文档,将其解析为xml,并替换源信息集中的xi:include元素及其子元素

当parse=“text”时,引用的文档将被提取并作为纯文本处理,以相同的方式替换xi:include元素