1

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

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

命令行就像

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

发现这篇文章: XML XInclude 和两个同名元素

已经尝试过parse="text",它没有按预期工作。

输入.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>

任何想法???多谢

不能将多个标签(“设置”)放在一个包装标签(“设置”)中,因为一个文件可以包含在很多文件中。不想在这么多宫殿里解析“设置”。

4

2 回答 2

1

尝试在 input.xml 中用 parse="xml" 替换 parse="text"

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

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

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

于 2017-03-01T18:30:04.617 回答
0

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

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

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

于 2016-01-18T20:22:02.920 回答