はい、有効な XML です。これを解析するには、XML がノードのツリーとして表されることを理解する必要があります。その XML は、次のツリー構造に解析されます。
p
|_ attributes
| |_ "class"="leaders"
|
|_ children
|_ #text "Todd"
|
|_ span
| |_ attributes
| | |_ "class"="leader-type"
| |
| |_ children
| |_ #text "."
|
|_ #text "R"
|
|_ span
| |_ attributes
| | |_ "class"="leader-type"
| |
| |_ children
| |_ #text "."
|
|_ #text "Colas"
各アトリビュートと子ノードは、 の個別のIXMLNode
インターフェイスとして表されますTXMLDocument
。ご覧のとおり、プレーン テキスト部分は独自の#text
ノードに分割されています。
XML を にロードするTXMLDocument
と、TXMLDocument.DocumentElement
プロパティは<p>
ノードを表します。そのノードのAttributeNodes
プロパティには「クラス」ノードが含まれており、そのプロパティにはノードとノードChildNodes
の最初のレベルが含まれています。ノードには独自のandリストなどがあります。したがって、これを解析するには、ノードを探してツリーを反復処理し、必要に応じてノードを使用してテキストを操作します。#text
<span>
<span>
AttributeNodes
ChildNodes
#text
<span>
このようなドキュメントを作成するには、必要に応じて個々のノードを作成するだけです。
Doc.Active := False;
Doc.Active := True;
Node := Doc.AddChild('p');
Node.Attributes['class'] := 'leaders';
Child := Doc.CreateNode('Todd', ntText);
Node.ChildNodes.Add(Child);
Child := Node.AddChild('span');
Child.Attributes['class'] := 'leader-type';
Child.Text := '.';
Child := Doc.CreateNode('R', ntText);
Node.ChildNodes.Add(Child);
Child := Node.AddChild('span');
Child.Attributes['class'] := 'leader-type';
Child.Text := '.';
Child := Doc.CreateNode('Colas', ntText);
Node.ChildNodes.Add(Child);
Doc.SaveTo...(...); // generate the XML to your preferred output
空白/改行を XML 出力に表示する場合は、#text
ノードのコンテンツにそれらの文字を含めるだけです。XML を に解析するときTXMLDocument
、不要な空白はデフォルトで取り除かれます。保持する場合は、XML をロードする前poPreserveWhiteSpace
にプロパティでフラグを有効にします。ParseOptions