2

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 ライブラリはありますか?

4

1 に答える 1

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);
于 2013-09-05T23:11:32.420 に答える