首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个XML是有效的吗?如何用TXMLDocument创建它?

这个XML是有效的吗?如何用TXMLDocument创建它?
EN

Stack Overflow用户
提问于 2012-08-01 23:21:47
回答 2查看 605关注 0票数 4

这个XML是“有效的”吗?

代码语言:javascript
复制
<?xml version="1.0"?>
<p class="leaders">
    Todd
    <span class="leader-type">.</span>
    R
    <span class="leader-type">.</span>
    Colas
</p>

我从来没有见过一个XML文档对一个节点有多个“值”,就像对<p>节点这样。

如何使用TXMLDocument解析出<p>的三个值?如何遍历<span>节点?

我要用TXMLDocument创建这样的Finally...how文档吗?

救命!

EN

回答 2

Stack Overflow用户

发布于 2012-08-02 00:00:55

当你说,它是否有效时,我想你的意思是:它结构良好吗?(如果没有DTD或模式,我们无法判断它是否有效)。

是的,它的格式很好。这是一个包含混合内容的文档的完美普通示例,而XML正是为此而设计的。

我不能回答您关于TXMLDocument的问题,因为我从来没有听说过它:大概它是delphi XML库的一部分。

票数 6
EN

Stack Overflow用户

发布于 2012-08-02 02:53:31

是,它是有效的XML。要解析它,您必须理解XML表示为一棵节点树。该XML将解析为以下树结构。

代码语言:javascript
复制
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属性表示<p>节点。该节点的AttributeNodes属性包含一个“类”节点,其ChildNodes属性包含第一级#text<span>节点。<span>节点有自己的AttributeNodesChildNodes列表,依此类推。因此,要解析它,您需要遍历树,查找#text节点,并使用<span>节点根据需要操作文本。

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

代码语言:javascript
复制
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标志。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11762410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档