use*_*674 3 xml delphi xml-parsing
我有以下 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>
Run Code Online (Sandbox Code Playgroud)
在 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>
Run Code Online (Sandbox Code Playgroud)
我在 Delphi 10 中找不到这样的功能。
有这样的功能吗?
或者在 Delphi 10 中实现一个的最佳方法是什么?
处理此问题的正确方法是使用实际的 XML 库,例如 Delphi 的本机TXMLDocument组件或IXMLDocument接口(或可用于 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;
Run Code Online (Sandbox Code Playgroud)
或者:
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |