有没有办法在Delphi中比较两个xml节点?
我正在使用MSXML解析器并将xml加载到IXmlDOMDocument2中.节点存储在IXmlDOMNode中.
如果有帮助的话,我可以使用Delphi的TXMLDocument.我不想下载任何第三方组件.
我只是想比较节点的结构,而不是值.
我看到了一个类似于Java的帖子/实用程序,但对于Delphi没什么.
谢谢!
如何将架构添加到IXMLDOMDocument?
例如,我想生成 XML:
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="Frob" Target="Grob"/>
</Relationships>
Run Code Online (Sandbox Code Playgroud)
我可以构造 DOMDocument60 对象(伪代码):
DOMDocument60 doc = new DOMDocument60();
IXMLDOMElement relationships = doc.appendChild(doc.createElement("Relationships"));
IXMLDOMElement relationship = relationships.appendChild(doc.createElement("Relationship"));
relationship.setAttribute("Id", "rId1");
relationship.setAttribute("Type", "Frob");
relationship.setAttribute("Target", "Grob");
Run Code Online (Sandbox Code Playgroud)
现在是如何添加命名空间的问题。
如果我执行明显的解决方案,请在关系节点上设置一个名为xmlns:
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
Run Code Online (Sandbox Code Playgroud)
通过类似的东西:
relationships.setAttribute("xmlns",
"http://schemas.openxmlformats.org/package/2006/relationships");
Run Code Online (Sandbox Code Playgroud)
文档保存时,导致生成的xml出错:
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="Frob" Target="Grob" xmlns=""/>
</Relationships>
Run Code Online (Sandbox Code Playgroud)
它xmlns在每个其他元素上放置空属性。在这个小测试文档中,它只会错误地应用xmlns到一个元素。在现实世界中,有数十个或数百万个具有空xmlns属性的其他元素。
我尝试设置元素的namespaceURI属性Relationships:
relationshps.namespaceURI := "http://schemas.openxmlformats.org/package/2006/relationships";
Run Code Online (Sandbox Code Playgroud)
但该属性是只读的。
文档确实有一个schemas属性,它获取或设置一个 …
使用Delphi 2009和IXMLDOMDocument2
在将XML加载到IXMLDOMDocument2时,我收到"在文本内容中找到无效字符"错误.字符为1B(十六进制)并存在于CDATA部分中.Microsoft的XML查看器(IE)加载文件就好了.XML看起来像......
<data><child><![CDATA[-- ]]></child></data>
注意:我尝试粘贴XML,但删除了特殊字符.在CDATA部分,我的XML文件中有" - "后面的1B字符.
我已经尝试添加到XML和其他编码的开头,没有什么对我有用.有没有什么可以加载这个文件?
谢谢,迈克尔