我有以下两个XML文件:
文件1
<?xml version="1.0"?>
<main>
<node1>
<subnode1>
<value1>101</value1>
<value2>102</value2>
<value3>103</value3>
</subnode1>
<subnode2>
<value1>501</value1>
<value2>502</value2>
<value3>503</value3>
</subnode2>
</node1>
</main>
文件2
<?xml version="1.0"?>
<main>
<node1>
<subnode1>
<value1>454</value1>
<value2>471</value2>
<value3>498</value3>
</subnode1>
<subnode2>
<value1>723</value1>
<value2>645</value2>
<value3>823</value3>
</subnode2>
</node1>
</main>
在Delphi中,我想将<node1>...</node1>
File2的完整结构添加到更名为File1的File1中<node2>...</node2>
。因此结果应如下所示:
<?xml version="1.0"?>
<main>
<node1>
<subnode1>
<value1>101</value1>
<value2>102</value2>
<value3>103</value3>
</subnode1>
<subnode2>
<value1>501</value1>
<value2>502</value2>
<value3>503</value3>
</subnode2>
</node1>
<node2>
<subnode1>
<value1>454</value1>
<value2>471</value2>
<value3>498</value3>
</subnode1>
<subnode2>
<value1>723</value1>
<value2>645</value2>
<value3>823</value3>
</subnode2>
</node2>
</main>
我已经<node1>...</node1>
在问题如何提取节点的内部文本和XML作为字符串中问过如何提取块了?(这确实是一个XY问题,很抱歉),我可以设计出一种将XML作为字符串处理的解决方案。
但我想可能会有更好的解决方案直接与XML功能一起使用。那么如何在Delphi 10中实现呢?
将XML文件解析为TXMLDocument
/IXMLDocument
对象之后,将IXMLNode
对象从一个文档克隆/移动到另一个文档就变得很简单了(请参阅IXMLNode.CloneNode()
,或IXMLNodeList.Add()
和IXMLNodeList.Remove()
)。尽管无法重命名节点,但是可以使用所需名称创建一个新节点(请参阅参考资料IXMLNode.AddChild()
),然后在新节点下克隆/移动旧节点的子节点。
您不应将XML字符串用于这些任务。而是操纵DOM树。因此,您将在File2中获得IXMLNode
for,<node1>
在File1中添加一个IXMLNode
for <node2>
,然后克隆/移动<subnode1>
并<subnode2>
从IXMLNode
File2中的文件移动到IXMLNode
File1中的文件。
话虽这么说,为什么要按顺序命名您的元素?<node>
,<subnode>
,<value>
,等就足够了就好了。根据需要<node>
,您可以在一个文档中包含多个,多个<subnode>
,多个<value>
。XML非常适合使用重复的元素名称。您实际上并不需要在元素名称中使用序号,例如:
<?xml version="1.0"?>
<main>
<node>
<subnode>
<value>101</value>
<value>102</value>
<value>103</value>
</subnode>
<subnode>
<value>501</value>
<value>502</value>
<value>503</value>
</subnode>
</node>
<node>
<subnode>
<value>454</value>
<value>471</value>
<value>498</value>
</subnode>
<subnode>
<value>723</value>
<value>645</value>
<value>823</value>
</subnode>
</node>
</main>
如果您确实需要按数字进行区分,则可以改用属性,例如:
<?xml version="1.0"?>
<main>
<node id="1">
<subnode id="1">
<value id="1">101</value>
<value id="2">102</value>
<value id="3">103</value>
</subnode>
<subnode id="2">
<value id="1">501</value>
<value id="2">502</value>
<value id="3">503</value>
</subnode>
</node>
<node id="2">
<subnode id="1">
<value id="1">454</value>
<value id="2">471</value>
<value id="3">498</value>
</subnode>
<subnode id="2">
<value id="1">723</value>
<value id="2">645</value>
<value id="3">823</value>
</subnode>
</node>
</main>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句