2013-09-05 2 views
2

Я создаю текстовый документ в формате открытого документа (odt), который основан на XML. Но у меня проблема при добавлении табулятора в текстовом проходе. Когда я создаю его в приложении Open Office и сохранить документ проход имеет внутреннее представление XML как:Как добавить/вставить узел 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'; 

Но я не могу найти какой-либо метод добавления узла в текст перед «Тимом» или, по крайней мере, с внутренней библиотекой Delphi XML.

Есть ли способ его достижения или есть ли другая библиотека XML Delphi, которая может это сделать?

ответ

5

Имейте в виду, что XML является иерархией узлов, включая текстовые фрагменты. 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); 
+0

После того как я изменил: 'Node1: = Node.OwnerDocument.CreateElement ('text: tab');' to 'Node1: = Node.OwnerDocument.CreateElement ('text: tab', '');' он работал отлично! – Niels

+3

+1. Отличный ответ, особенно иллюстрация. Ницца, Реми. :-) –

Смежные вопросы