字符串到xmlNode delphi(或如何将xml片段添加到TXMLDocument)

字符串到xmlNode delphi(或如何将xml片段添加到TXMLDocument),delphi,msxml,xmlnode,xmlnodelist,txmldocument,Delphi,Msxml,Xmlnode,Xmlnodelist,Txmldocument,我有几个包含格式良好的XML的文本字符串 我希望能够(1)将这些字符串转换为IXMLNodes,然后(2)将它们附加到现有的XMLDocument。最好不首先声明新的XMLDocument 这似乎不可能 但是,有没有什么简单的方法可以完成类似的任务?我最初的想法是使用IXMLNode.XML(string)属性并插入新字符串。没有像IXMLNode.XML这样的文件是只读的 下面是一个示例,如果我在TStringList中有以下字符串 <Property Name="Version" Rt

我有几个包含格式良好的XML的文本字符串

我希望能够(1)将这些字符串转换为
IXMLNodes
,然后(2)将它们附加到现有的
XMLDocument
。最好不首先声明新的
XMLDocument

这似乎不可能

但是,有没有什么简单的方法可以完成类似的任务?我最初的想法是使用
IXMLNode.XML
(string)属性并插入新字符串。没有像
IXMLNode.XML
这样的文件是只读的

下面是一个示例,如果我在
TStringList
中有以下字符串

<Property Name="Version" RttiType="tkString"></Property>
<Property Name="ShowSubunit" RttiType="tkBoolean"></Property>
有没有其他(简单的)方法来实现这一点(请不要对XML属性进行受保护的攻击)


谢谢大家!

除非手动解析XML片段,然后手动构造相关的子节点/属性,否则必须将片段加载到临时XMLDocument中,然后根据需要将其节点移动到主XMLDocument中

更新:例如:

Node := XmlDocument1.DocumentElement.ChildNodes[0]; // <Class> node
Node.ChildNodes.Add(LoadXMLData('<Property Name="Version" RttiType="tkString"></Property>').DocumentElement);
Node.ChildNodes.Add(LoadXMLData('<Property Name="ShowSubunit" RttiType="tkBoolean"></Property>').DocumentElement);
Node:=XmlDocument1.DocumentElement.ChildNodes[0];//节点
Node.ChildNodes.Add(LoadXMLData(“”).DocumentElement);
Node.ChildNodes.Add(LoadXMLData(“”).DocumentElement);
退房。目前,它与OmniXML绑定,但功能强大。您想要的是这样的:

CurrentNode.Append(StorageFromXML('<Node>Content</Node>'));
CurrentNode.Append(StorageFromXML('Content');

一行代码。

这可能确实是唯一的出路。你能给我一个简单的例子吗?仅供参考,我自己也尝试过,但DOM供应商“MSXML”不支持get“Property或Method”importNode这是我尝试过的代码:currProgNode.DOMNode.ownerDocument.importNode(lclXMLObj.Node.DOMNode,true);(其中lclXMLObj为TXMLDocument类型,currProgNode为IXMLNode类型,基本上是按照建议在XML文档中复制节点)。我真的觉得这应该容易得多。我希望我错过了一些明显的东西。再次感谢您。您不需要下拉到DOM级别来在文档之间移动节点。只需将
Add()
Insert()
一个
IXMLNode
插入到另一个
IXMLNode
ChildNodes
中,它将根据需要自动移动到新文档。我用一个例子更新了我的答案。谢谢你的重定向(和答案!)。我在DOM级别浪费了很多时间。谢谢。这是一种非常简单的方法,不幸的是,我仅限于直接使用TXMLDocument或MSXML。还有其他想法吗?我看你找到了解决办法。不幸的是,在你的情况下,这是唯一可行的方法。Vanila XML使用起来非常笨拙,这就是我制作SimpleStorage的原因。当我有时间时,我计划扩展它,使它与几乎所有的结构化存储兼容:)
CurrentNode.Append(StorageFromXML('<Node>Content</Node>'));