我有以下 XML 结构:
<?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>
在 Delphi 中,我正在寻找一个将节点的内部文本和 XML 作为字符串返回的函数。例如 <node1>
字符串应该是(如果可能,包括缩进和换行符):
<subnode1>
<value1>101</value1>
<value2>102</value2>
<value3>103</value3>
</subnode1>
<subnode2>
<value1>501</value1>
<value2>502</value2>
<value3>503</value3>
</subnode2>
我在 Delphi 10 中找不到这样的函数。
有这样的功能吗?
或者在 Delphi 10 中实现一个的最佳方法是什么?
最佳答案
处理此问题的正确方法是使用实际的 XML 库,例如 Delphi 的 native TXMLDocument
组件或 IXMLDocument
接口(interface)(或可用于 Delphi 的任何数量的第 3 方 XML 库)。您可以将 XML 加载到其中,然后找到 IXMLNode
对于 <node1>
元素(或任何你想要的元素),然后阅读它的 XML
需要的属性。
例如:
uses
..., Xml.XMLIntf, Xml.XMLDoc;
var
XML: DOMString;
Doc: IXMLDocument;
Node: IXMLNode;
begin
XML := '<?xml version="1.0"?><main><node1>...</node1></main>';
Doc := LoadXMLData(XML);
Node := Doc.DocumentElement; // <main>
Node := Node.ChildNodes['node1'];
XML := Node.XML;
ShowMessage(XML);
end;
或者:
uses
..., Xml.XMLIntf, Xml.xmldom, Xml.XMLDoc;
var
XML: DOMString;
Doc: IXMLDocument;
Node: IXMLNode;
XPath: IDOMNodeSelect;
domNode: IDOMNode;
begin
XML := '<?xml version="1.0"?><main><node1>...</node1></main>';
Doc := LoadXMLData(XML);
XPath := Doc.DocumentElement.DOMNode as IDOMNodeSelect;
domNode := XPath.selectNode('/main/node1');
Result := TXMLNode.Create(domNode, nil, (Doc as IXmlDocumentAccess).DocumentObject);
XML := Node.XML;
ShowMessage(XML);
end;
关于xml - 如何将节点的内部文本和XML提取为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62802155/