- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我想合并 2 个具有相同结构的 XML 文件来制作一个。例如;
Test1.xml
<?xml version="1.0" encoding="UTF-8"?>
<ns:Root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="urn:TestNamespace"
xsi:schemaLocation="urn:Test.Namespace Test1.xsd"
>
<ns:element1 id="001">
<ns:element2 id="001.1" order="1">
<ns:element3 id="001.1.1" />
</ns:element2>
<ns:element2 id="001.2" order="2">
<ns:element3 id="001.1.2" />
</ns:element2>
</ns:element1>
</ns:Root>
和Test2.xml
<?xml version="1.0" encoding="UTF-8"?>
<ns:Root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="urn:TestNamespace"
xsi:schemaLocation="urn:Test.Namespace Test1.xsd"
>
<ns:element1 id="999">
<ns:element2 id="999.1" order="1">
<ns:element3 id="999.1.1" />
</ns:element2>
</ns:element1>
</ns:Root>
创造
TestOutput.xml
<?xml version="1.0" encoding="UTF-8"?>
<ns:Root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="urn:TestNamespace"
xsi:schemaLocation="urn:Test.Namespace Test1.xsd"
>
<ns:element1 id="001">
<ns:element2 id="001.1" order="1">
<ns:element3 id="001.1.1" />
</ns:element2>
<ns:element2 id="001.2" order="2">
<ns:element3 id="001.1.2" />
</ns:element2>
</ns:element1>
<ns:element1 id="999">
<ns:element2 id="999.1" order="1">
<ns:element3 id="999.1.1" />
</ns:element2>
</ns:element1>
</ns:Root>
即一个 XML 文件,其中包含每个文件的所有元素。
我在 StackOverflow 上发现了一个有用的问题,并提出了这个问题;
合并.xml
<?xml version="1.0"?>
<ns:Root xmlns:xi="http://www.w3.org/2003/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="urn:TestNamespace">
<xi:include href="Test1.xml" parse="xml" xpointer="element(//ns:Root/ns:element1)" />
<xi:include href="Test2.xml" parse="xml" xpointer="element(//ns:Root/ns:element1)" />
</ns:Root>
我通过这样做来运行(出于涉及的原因,我需要使用 xmllint)
xmllint -xinclude Merge.xml
但这不起作用,它会提示各种问题,这些问题似乎与 xpointer 有关。
parser error : warning: ChildSeq not starting by /1
Merge.xml:7: element include: XInclude error : XPointer evaluation failed: #element(//ns:Root/ns:element1)
Merge.xml:7: element include: XInclude error : could not load Test1.xml, and no fallback was found
parser error : warning: ChildSeq not starting by /1
Merge.xml:9: element include: XInclude error : XPointer evaluation failed: #element(//ns:Root/ns:element1)
Merge.xml:9: element include: XInclude error : could not load Test2.xml, and no fallback was found
<?xml version="1.0"?>
<ns:Root xmlns:xi="http://www.w3.org/2003/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns="urn:TestNamespace">
<xi:include href="Test1.xml" parse="xml" xpointer="element(//ns:Root/ns:element1)"/>
<xi:include href="Test2.xml" parse="xml" xpointer="element(//ns:Root/ns:element1)"/>
</ns:Root>
如果我在 Merge.xml 中省略 xpointer 属性,那么我会得到一些合理的输出,但它当然不仅仅是包含我想要的元素。
有人可以就我在 xpointer 上做错了什么提供一些建议吗?
感谢期待。
最佳答案
我对此进行了更多尝试,并在网络上找到了大量示例,表明我所做的是正确的。现在这是一个工作版本...
<?xml version="1.0"?>
<Root xmlns:xi="http://www.w3.org/2003/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="http://testurl.com/now">
<xi:include href="Test1.xml" xpointer="xmlns(ns=http://testurl.com/now)xpointer(/ns:Root/ns:element1)" parse="xml" />
<xi:include href="Test2.xml" xpointer="xpointer(//Root/element1)" parse="xml" />
</Root>
此示例使用具有命名空间的 Test1.xml 版本和不具有命名空间的 Test2.xml。
输出现在看起来像这样......
<?xml version="1.0"?>
<Root xmlns:xi="http://www.w3.org/2003/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns="http://testurl.com/now">
<ns:element1 xmlns:ns="http://testurl.com/now" id="001">
<ns:element2 id="001.1" order="1">
<ns:element3 id="001.1.1"/>
</ns:element2>
<ns:element2 id="001.2" order="2">
<ns:element3 id="001.1.2"/>
</ns:element2>
</ns:element1><ns:element1 xmlns:ns="http://testurl.com/now" id="003">
<ns:element2 id="007.0" order="1">
<ns:element3 id="007.1.1"/>
</ns:element2>
</ns:element1><ns:element1 xmlns:ns="http://testurl.com/now" id="002">
<ns:element2 id="002.1" order="3">
<ns:element3 id="002.1.1"/>
</ns:element2>
<ns:element2 id="002.2" order="4">
<ns:element3 id="002.1.2"/>
</ns:element2>
</ns:element1>
<element1 id="999">
<element2 id="999.1" order="1">
<element3 id="999.1.1"/>
</element2>
</element1>
</Root>
这当然可以接受,如果element1的开闭换行还在就好了
关于xml - 如何使用带有 Xinclude 的 xpointer 来引用元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16563106/
是否有任何支持 XPointer 和 xpointer() 方案的 java 库? Xerces 通过 XPointer Framework 和 XPointer 支持 XIncludeelement
在XLink和 XPointer 语法 章节,我们讲到可以在 xlink:href 属性中把 XPointer 部分添加到 URL 后面,这样就可以导航到文档中某个具体的位置 现在,让我们通过一个范
XLink 标准定义了如何在 XML 文档中创建超级链接 学会 XLink 和 XPointer 不能帮你找到工作,不过可以提高你的技术见解 XPointer 则允许这些超级链接指向 X
XLink 标准定义了如何在 XML 文档中创建超级链接 XPointer 则允许这些超级链接指向 XML 文档中的更多具体部分 您应当具备的基础知识 在继续学习之前,我们希望你对以下知识点有基
在HTML 中,我们知道 <a> 元素可定义超级链接, 而且,几乎只有 <a>标签可以定义连接。 但,在XML 不是这样工作的。 在XML 文档中,您可以使用任何你需要的元
我一直在尝试让 XPointer URI 在 SVG 文件中工作,但到目前为止还没有成功。在尝试了一些更复杂但失败的事情之后,我将其简化为只引用一个 ID。然而,这仍然失败。 规范似乎很清楚这个实现:
XLink、XPointer 和 XInclude 有什么区别? 太乱了。有人可以解释一下区别吗? 最佳答案 简答: XLink 和 XPointer 非常相似,因为它们提供了一种引用其他元素的方法,
我想合并 2 个具有相同结构的 XML 文件来制作一个。例如; Test1.xml
XPath、XQuery 和XPointer 有什么区别?据我所知,XQuery 是XPath 的扩展版本。我对 XPath 有一些基本了解。是否有 XPath 中可用而 XQuery 中没有的功能?
此处 XInclude/XPointer 的令人沮丧的问题。 目的是将 XML 格式的价格条目列表中的条目包含到另一个文档中。我有一个包含价格列表的文档,如下所示: ]>
很抱歉,如果之前有人问过这个问题,我什至不确定要搜索什么才能提出这个问题。 当我创建一个 typedef struct 时,我通常会这样做: typedef struct myStruct { i
我有一个包含 2 个“sub_x.xml”文件的“main.xml”文件。包含行使用“xpointer”仅指向/包含包含 xml 的特定标记。当我使用 ElementTree 来确定它是否正常工作时,
我是一名优秀的程序员,十分优秀!