创建IXMLDOMDocument对象的三种方法

转载 2004年10月23日 09:31:00
1)[方法1] 直接创建 IXMLDOMDocument? , 例(1)
?? uses msxml;
?? var DOC:IXMLDOMDocument;
?? doc := CoDOMDocument.create;
?? .....
?? Doc := nil;
?
A)doc.load('C:/temp.xml');? //从文件载入
?B) 动态创建

?? var aElement,aElement2: IXMLDOMElement;? // [ aNode:IXMLDOMNode ==>? .AppendChild() ]

?? //加入版本信息 ‘
?? doc.AppendChild(doc.CreateProcessingInstruction('xml', 'version="1.0" encoding="GB2312"'));
???? (*)因为此函数返回结果不包含 'encoding="GB2312"' 故须保存前注意.
?? //加入根结点
?? doc.AppendChild(doc.CreateElement('bootDocNode')); //// == aElement?
?? //加入子结点
?? aElement:=IXMLDOMElement(Doc.DocumentElement.AppendChild(Doc.CreateElement('ChileNode1')));
?? //设置接点属性
?? aElement.SetAttribute('ID', '11');
?? aElement.SetAttribute('Units', '元/m2');
?? //设置结点内容
?? aElement.AppendChild(Doc.CreateTextNode('结点内容'));
?? //子结点添加子结点
?? aElement2:=IXMLDOMElement(aElement.AppendChild(Doc.CreateElement('Child_ChileNode1')));

(2) [方法2] 直接创建 IXMLDocument ( 不是IXMLDOMDocument )
? uses XMLIntf,XMLDoc;
? var xmlDoc:IXMLDocument; aNode:IXMLNode;? s:string;

? xmlDoc := TXMLDocument.Create(nil);
? try
??? //加入版本信息 ‘
??? xmlDoc.Active := True;?? xmlDoc.Version := '1.0';? xmlDoc.Encoding :='GB2312';
??? //加入根结点
??? aNode:=xmlDoc.AddChild('bootDocNode');
??? //加入子结点
??? aNode:=aNode.AddChild('ChileNode1');
??? //设置接点属性
??? aNode.SetAttribute('ID', '22');
??? aNode.SetAttribute('Units', '元/m2');
??? //设置结点内容
??? aNode.Text := '结点内容';
??? //子结点添加子结点
??? aNode:=aNode.AddChild('Child_ChileNode1') ;
??? aNode.Text := 'Child_ChileNod内容';
??
??? s := xmlDoc.XML.Text ;? //? .XML 返回的是 Tstrings
? finally
??? xmlDoc := nil ;
? end;

(3)利用 XMLDataBinding
??? I) 准备好XML文件,此XML文件有较强的代表性,保证程序中所用的结点及其关系都存在
?? II)利用 file-->new-->XML Data Binding
? III)创建XML对象
?? A)v:string; //XML文件内容
??? Doc : IXMLBudgetDocTyp; //IXMLBudgetDocTyp是XML文件的根结点
??? Doc := LoadXMLData(v).GetDocBinding('BudgetDoc', TXMLBudgetDocType) as IXMLBudgetDocType;
?? B)Doc := LoadBudgetDoc('C:/temp.xml');
? IV) 应用
??? Doc.ChildNodes.FindNode('Docfile') as IXMLDocfileType;

(4)利用TXMLDocument控件
??? XMLDocument1.fileName:='C:/temp.xml';
??? XMLDocument1.active:=true;? // XMLDocument1 相当于 Doc

(5)XML对象的其他方法
?? IXMLNodeList.FindNode(NodeName: DOMString): IXMLNode;
?? IXMLNodeList.FindNode(NodeName, NamespaceURI: DOMString): IXMLNode;
?? IXMLNodeList.FindNode(ChildNodeType: TGuid): IXMLNode;
?? IXMLNodeList.FindSibling(const Node: IXMLNode; Delta: Integer): IXMLNode;
?? IXMLNodeList.First: IXMLNode;
?? IXMLNodeList.Last: IXMLNode;
?? ... ...
???
////////////////////////////////////////////////////////////////////////
//例(1)
uses msxml;??
??? doc:IXMLDOMDocument;
??? budgetdoc:ixmlDomNode;
??? Rela:IxmlDOMNode;
??? rs:ixmldomnodelist;

//建立或取得XML结点
? doc := CoDOMDocument.create;
? doc.load('C:/temp.xml');
? budgetDoc := doc.selectSingleNode('BudgetDoc');
? rela := budgetdoc.SelectSingleNode('Relation');

//创建XML子结点?
? if not assigned(rela) then
? begin
??? rela :=? doc.createElement('Relation');
??? rela.setAttribute('BudgetId',0);
??? rela.setAttribute('name','名称');
??? budgetdoc.appendChild(rela);
? end;

//取子结点(序列)
? rs := rela.selectNodes('Rela[@BudgetId="2" and @TaskId="8"]');
? for i := 0 to rs.length -1 do
? begin
??? s:= s + rs[i].attributes.getnameditem('NewRate').nodeValue;
? end;
?
? rela:=doc.ChildNodes.FindNode('DOMNode') as IxmlDOMNode;

//移除子结点
??? for i := rs.length -1 downto 1 do
????? rela.removeChild(rs[i])

//取父结点
??? if assigned(anode.parentNode) and (Anode.parentNode.nodeName='Task') then
????? result := Anode.parentNode;

//取属性
? DOC.DocumentElement.Attributes['Name']
? rela.Attributes['Name']
? rs.Nodes[i].Attributes['Name']

? Ajob:ixmldomnode;jobs:ixmldomNodeList;
? jobs := Ajob.selectNodes('RCJ[@Attrib="'+AAttrib+'"]')

XMLDoc的方法

先看一下如何用XMLDoc: 它是用来拼一个xml文件的: var XmlDoc = new ActiveXObject("MSXML2.DOMDocument"); var Instruc...
  • angus_17
  • angus_17
  • 2012年03月22日 20:45
  • 1507

XML DOC解析

1234中的1234本身也代表一个节点,只不过它是一个简单的TEXT节点 获取1234时也需要使用firstChild()方法来得到node节点 [employee: null]:Text节点 D...
  • qq_33599978
  • qq_33599978
  • 2017年03月31日 23:36
  • 209

IXMLDOMDocument中的load方法返回值有BUG

IXMLDOMDocument中的load方法返回值是否有BUGIXMLDOMDocument中load一个xml文件时,返回值和msdn上说的不符MSDN上说的是:Return ValuesS_OK...
  • dongzhiquan
  • dongzhiquan
  • 2009年03月20日 08:44
  • 3015

msxml dom 全解析

msxml dom 全解析  一 关于msxml DOM 什么是msxml MSXML 是一款微软的 xml 语言解析器, 如果你不了解COM,知道这引起就可以了, 否则的话,你应该...
  • aasmfox
  • aasmfox
  • 2016年03月12日 07:50
  • 594

我写的一个xml文件类,封装了 IXMLDocument(c++builder).

/*    这是我写的一个xml文件类,封装了 IXMLDocument,用于在c++builder程序中    建立、读写xml文件,经过一年多的修改和使用,感觉还行。作者:lao-hong  */...
  • hong_qi
  • hong_qi
  • 2004年07月23日 10:37
  • 3664

Microsoft.XMLDOM组件

XMLDOM是用来访问和操作XML文档的编程接口规范。XMLDOM被设计为可用于任何语言和任何操作系统。借助DOM,程序员可以创建XML文档、遍历其结构,增、改、删其元素。DOM将整个XML文档视作一...
  • justmuch
  • justmuch
  • 2007年03月24日 22:15
  • 10288

动态创建TXMLDocument--使用IXMLDocument接口

var XML : TXMLDocument; DocIntf : IXMLDocument; begin XML := TXMLDocument.Create(nil); DocIn...
  • u010973206
  • u010973206
  • 2015年04月18日 13:24
  • 840

MSXML使用教程

在DOM接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap。在这四个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过...
  • woshinia
  • woshinia
  • 2012年06月27日 16:44
  • 9246

Delphi 与 XML 示例(直接利用IXMLDocument)

(*) uses msxml,XMLIntf,XMLDoc;(1)//从文件存取function writeXML(XMLName,nodeName,nodeValue:string;proID:in...
  • LuckyJan
  • LuckyJan
  • 2004年09月01日 15:10
  • 2840

html解析器ixml

  • 2013年08月15日 19:27
  • 173KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:创建IXMLDOMDocument对象的三种方法
举报原因:
原因补充:

(最多只允许输入30个字)