xml - 如何将节点的内部文本和XML提取为字符串?

标签 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>

在 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/

相关文章:

Android:尝试将 setText 添加到 EditText

delphi - 用于输入一系列值的组件(类似于轨迹栏)

delphi - 如何更新 Delphi Datasnap 服务器?

python xml.etree - 删除节点但保留子节点(将子节点分配给祖 parent )

xml - 我的 xpath 查询没有找到任何结果

java - @XmlRegistry - 它是如何工作的?

java - 如何使用一个路由生成器映射以不同方式编码和解码的 2 个服务?

delphi - 避免 "variable might not have been initialized"

java - 如何在 JSP 项目的服务器端找到应用程序 XML 文件?

java - 简单的 Java Xml 到 POJO 映射/绑定(bind)?