xml的子节点的数目(100分)

A

ABA

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用什么方法才能知道,一个节点下的子节点的数目!
 
childnodes.count
 
No.1: 创建一个Document对象:首先们应该知道,要对XML进行操作的话,那么必须包含以
下几个单元xmldom, XMLIntf, msxmldom, XMLDoc,而这里所说的DOM的接口,很大一部分在
XMLDom里充分的展现给用户。创建一个Document: 我们只需要将Internet中的
TXMLDocument控件放到应用程序中就可以了,
如它的声明部分:XMLDoc: TXMLDocument;No
.2: 加载XML 加载XML很简单,
如下:XMLDoc.LoadFromFile('MyBooks.XML');当XML文件加载之后,
那么就会形成如上图所示的一个DOM树,我们对其所操作实际上就是对这个DOM树进行所有
的操作。No.3: 遍历XML文档首先,我们要获取XML文档的根元素节点,用Delphi描述这个
操作如下: var Root ,iRoot,jRoot,Root_ : IXMLNode;  
…begin
Root := XMLDoc.DocumentElement;…end;
  
现在,我们已经得到了文档的根元素节点,对于其他元素,
我们如何获得对它的访问呢?以文档中的各个book元素为例,
对每个元素节点以及其子节点的访问可以通过下面的方式来实现。
For Index_ := 0 to Root.ChildNodes.Count - 1do

begin
jRoot := Root.ChildNodes[Index_];…. end;
所以,我们就可以通过循环来进行访问。记住,我们通过上边的语句仅仅是对其节点进行
访问(或者是对像,其实对象正确。),那们我们如何才能得到如第一个节点的值
:Mastering Delphi5这个值呢?如下:
Root := XMLDoc.DocumentElement;
jRoot := Root.ChildNodes[0];IRoot := jRoot.ChildNodes[0];
Stringvalue := iRoot. Nodevalue;请记住,
我们这儿用的是iRoot.Nodevalue从而得到的值是 Mastering Delphi5,那么如果我们用
iRoot.NodeText呢?将得到的是 Title;这也是NodeText和Nodevalue之间的差别,同时,
我们应该知道,这儿可能和VB有些不太一样。 在上面的代码中,root是文档的根元素
节点books节点,jRoot和iRoot都是元素类型的节点, iRoot. Nodevalue是一个字符串。
childNodes是NodeList类型的属性,item是NodeList接口中Node类型的属性,通过item可以
访问NodeList节点集合中的任意节点  上面的例子给出了如何访问DOM树中的元素节点;完
整的代码如下:procedure TForm1.Button2Click(Sender: TObject);
//触发事件var Root ,iRoot,jRoot,Root_ : IXMLNode;
TENode , TiNode,TjNode :
TTreeNode;
Index , Index_ , IndexV : Integer;
begin
TreeView1.Items.Clear;
Root := XMLDoc.DocumentElement;
TENode := TTreeNode.Create(Nil);
TjNode := TreeView1.Items.Add(Nil,Root.NodeName);

For Index_ := 0 to Root.ChildNodes.Count - 1do

begin
jRoot := Root.ChildNodes[Index_];

if jRoot.HasChildNodes then
begin

TENode := TreeView1.Items.AddChild(TjNode,Root.ChildNodes[Index_].NodeName);
if BeXMLNode(jRoot) then

XMLCNode_BL(jRoot,TENode);

end;

end;
end;
Function TForm1.XMLCNode_BL(XNodevalue : IXMLNode;TNodevalue : TTreeNode) :
IXMLNode;
var Index : Integer;
Node : TTreeNode;
begin

Node := TTreeNode.Create(Nil);
if XNodevalue.HasChildNodes then

begin

For Index := 0 to XNodevalue.ChildNodes.Count - 1do

begin
Node := TNodevalue;

TreeView1.Items.AddChild(Node,XNodevalue.ChildNodes[Index].Nodevalue);
end;
end;
end;
function TForm1.BeXMLNode(Nodevalue: IXMLNode): Boolean;
begin
Result := False;
if Nodevalue.HasChildNodes then

Result := True;
end;
 
To haofang
我知道你的方法,但是不和我的要求,我的意思是可以像这样用的!
1:aNode:=self.XMLDocument1.DocumentElement.ChildNodes[1];
// Ieapp
2:aValueNode:=aNode.ChildNodes[0];
// IeApp(0..n)
3:sString:=avalueNode.ChildNodes['JobNo'].Text;
上面这种1,2这种情况就没有办法使用COUNT!
没有这样的用法
self.XMLDocument1.DocumentElement.ChildNodes[1].count;
有其他的办法吗?
 
TO:ugvanxk
我的XML的结构如下:
<IeData>
<TableName1>
<Record1><Column1></Column1><ColumnN></columnN></Record1>
.
.
<RecordN><Column1></Column1><ColumnN></columnN></RecordN>
</TableName1>


<TableNameN>
<Record1><Column1></Column1><ColumnN></columnN></Record1>
.
.
<RecordN><Column1></Column1><ColumnN></columnN></RecordN>
</TableNameN>
我怎么知道,TableName节点下面子节点的数目,谢谢!
 
多人接受答案了。
 
顶部