是的,它是有效的 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
属性包含第一级#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