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

时间:2015-10-31 09:58:51

标签: xml xmllint xinclude

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

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

命令行就像

xmllint input.xml --xinclude --output output.xml --noent

发现这篇文章: XML XInclude and two elements with the same name

尝试过 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>

shared.3.xml

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

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>

任何想法??? 非常感谢

不能将多个标签('设置')放到一个包装标签('设置'),因为许多文件都可以包含一个文件。不想在如此众多的宫殿中解析“设置”。

2 个答案:

答案 0 :(得分:0)

根据工具箱的外观,https://github.com/dret/XIPr可能有所帮助。它是XSLT中XInclude的一个实现,这意味着您可以通过运行XIPr XSLT代码来处理包含XInclude的XML。实质上,您将包含XInclude的XML转换为XML,以解析这些包含。

请记住,XIPr使用XSLT 2.0,这意味着如果您只拥有XSLT 1.0处理器就无法使用它。

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

答案 1 :(得分:0)

尝试替换parse =&#34; text&#34; with parse =&#34; xml&#34;在input.xml中

&#34;当解析=&#34; xml&#34; (顺便说一下,这是默认设置),引用的文档被提取,被解析为XML,并替换源信息集中的xi:include元素及其后代。&#34;

&#34;当parse =&#34; text&#34;时,引用的文档被提取并被视为纯文本,以相同的方式替换xi:include元素。&#34;

https://msdn.microsoft.com/en-us/library/aa302291.aspx