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


<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>
任何想法??? 非常感谢
不能将多个标签('设置')放到一个包装标签('设置'),因为许多文件都可以包含一个文件。不想在如此众多的宫殿中解析“设置”。
答案 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;