如何在文本中添加/插入 xml 节点

Posted

技术标签:

【中文标题】如何在文本中添加/插入 xml 节点【英文标题】:How to add/insert a xml node into text 【发布时间】:2013-09-05 22:19:43 【问题描述】:

我正在生成一个基于 XML 的开放文档格式 (odt) 的文本文档。 但是在文本段落中添加制表符时出现问题。 当我在 Open Office 应用程序中创建它并保存文档时,该段落的内部 XML 表示为:

<text:p text:style-name="P5">Prepared by: <text:tab/>Tim Test</text:p>

当自动生成它时,我在我的源代码中来到这部分:

   Node, Node1: IXMLNode;
   ...
   Node := Node1.AddChild('text:p');
   Node.Attributes['text:style-name'] := 'P5';
   Node.Text := 'Prepared by: Tim Test';

但我找不到任何方法将节点添加到“Tim”之前的文本中,或者至少没有使用内部 Delphi XML 库。

有没有办法实现它或者是否有任何其他 Delphi XML 库可以做到这一点?

【问题讨论】:

【参考方案1】:

请记住,XML 是节点的层次结构,包括文本 sn-ps。您显示的 XML 在树中如下所示:

[element] 'text:p'
  │
  ├─[attributes]
  │   │
  │   └─[attribute] 'text:style-name'
  │       │
  │       └─[text] 'PS'
  │
  └─[children]
      |
      ├─[text] 'Prepared by: '
      │
      ├─[element] 'text:tab'
      │ 
      └─[text] 'Tim Test'

这应该可以帮助您直观地了解如何将节点添加到文档中以获得所需的输出,例如:

Node, Node1, Node2: IXMLNode;
...
Node := Node1.AddChild('text:p');
Node.Attributes['text:style-name'] := 'P5';

Node2 := Node.OwnerDocument.CreateNode('Prepared by: ', ntText);
Node.ChildNodes.Add(Node2);

Node2 := Node.OwnerDocument.CreateElement('text:tab', '');
Node.ChildNodes.Add(Node2);

Node2 := Node.OwnerDocument.CreateNode('Tim Test', ntText);
Node.ChildNodes.Add(Node2);

【讨论】:

在我将Node1 := Node.OwnerDocument.CreateElement('text:tab'); 更改为Node1 := Node.OwnerDocument.CreateElement('text:tab',''); 之后,它工作得非常完美! +1。很好的答案,尤其是插图。不错,雷米。 :-)

以上是关于如何在文本中添加/插入 xml 节点的主要内容,如果未能解决你的问题,请参考以下文章

我们如何识别一组节点并将该组添加到另一个 XSLT 中 XML 源结构不同的节点?

通过 PHP 在 XML 文件中添加新节点

C# 操作xml 在指定节点插入新节点,该如何操作?

如何在 plsql 的 varchar2 字段中的 xml 节点末尾插入“1”?

在处理 XML 时,如何在特定节点之后插入一个节点?

如何在 Android 的 XML 编辑器中插入特殊字符作为文本?