【问题标题】:Is this XML valid, and how to create it with TXMLDocument这个 XML 是否有效,以及如何使用 TXMLDocument 创建它
【发布时间】:2012-07-30 12:51:39
【问题描述】:

这个 XML “有效”吗?

<?xml version="1.0"?>
<p class="leaders">
    Todd
    <span class="leader-type">.</span>
    R
    <span class="leader-type">.</span>
    Colas
</p>

我从未见过像 &lt;p&gt; 节点那样为一个节点包含多个“值”的 XML 文档。

如何使用 TXMLDocument 解析出&lt;p&gt; 的三个值?以及如何遍历到&lt;span&gt; 节点?

最后...如何使用 TXMLDocument 创建这样的 XML 文档????

帮助!!!!

【问题讨论】:

  • 是的,这是完全有效的 XML。它看起来像 XHTML。将其视为 HTML 文档。
  • 也就是说,根节点是&lt;p&gt;,所以它不是有效的XHTML。

标签: xml delphi txmldocument


【解决方案1】:

是的,它是有效的 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"

每个属性和子节点在TXMLDocument 中表示为一个单独的IXMLNode 接口。如您所见,纯文本部分被分隔成它们自己的#text 节点。

将 XML 加载到 TXMLDocument 后,TXMLDocument.DocumentElement 属性表示 &lt;p&gt; 节点。该节点的AttributeNodes 属性包含一个“类”节点,其ChildNodes 属性包含第一级#text&lt;span&gt; 节点。 &lt;span&gt; 节点有自己的 AttributeNodesChildNodes 列表,依此类推。因此,要解析它,您将遍历树以查找 #text 节点,并根据需要使用 &lt;span&gt; 节点来操作文本。

要创建这样的文档,您只需根据需要创建各个节点,例如:

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 之前启用 ParseOptions 属性中的 poPreserveWhiteSpace 标志。

【讨论】:

  • 要查看树,在 Web 浏览器中打开这样的 XML 可能是最简单的。然后使用内置的 DOM 检查工具。在 MSIE9 中是 F12 键,在 Chrome 中右击和“检查”菜单,在 Opera 中这两种方式都可以工作。
【解决方案2】:

当您说它是否有效时,我认为您的意思是:它是否格式良好? (如果没有 DTD 或模式,我们无法判断它是否有效)。

是的,它格式正确。它是包含混合内容的文档的一个完全正常的示例,这正是 XML 的设计目的。

我无法回答您关于 TXMLDocument 的问题,因为我从未听说过它:大概它是 delphi XML 库的一部分。

【讨论】:

  • +1 用于解释格式良好和有效之间的区别。
  • +1 表示“格式良好”。 TXMLDocumentXML DOM 的包装器。在 Windows 操作系统上默认使用MS XML;在其他操作系统上(或可选,如果这是您的偏好),它使用开源 XML(Xerces 或 OpenXML 取决于 Delphi 版本,IIRC,但我不使用它们,所以我不确定)。
猜你喜欢
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 2011-09-18
  • 2022-11-03
  • 1970-01-01
  • 2018-11-02
相关资源
最近更新 更多