想要使用一个简单的工具(现在,我使用"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>


<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>
我的期望是
<?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>