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



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

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

命令行类似

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

找到这篇文章:XML XInclude和两个同名元素

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

共享.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>

知道吗???非常感谢

无法将多个标记("Setting")放在一个包装标记("Settings")中,因为一个文件可能包含在多个文件中。不想在这么多宫殿中解析"设置"。

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

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

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

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

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

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

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

对于输入文件:

<?xml version="1.0"?>
<Tag1 xmlns:xi="http://www.w3.org/2003/XInclude" name="nameABC">
  <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>

运行命令:

$ xmllint --xinclude file.xml | xmlstarlet unesc | xml fo
<?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>

相关内容

  • 没有找到相关文章

最新更新