很久了,真的没人会吗? 求求大家,给个答案吧! (100分)

  • 主题发起人 主题发起人 nibul
  • 开始时间 开始时间
N

nibul

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样通过XMLDocument获得XML文件中的字段结构与数据内容?希望说的具体点!
我要的是通过XMLDocument获得XML文件中的数据结构与数据内容,
往XML文件里写数据我早已经知道,通过ADO组件获得XML文件的数据结构与数据内容
我也知道了,我是想通过XMLDocument获得XML文件中的数据结构与数据内容。
在XMLDocument的向导中如果加载XML文件就可以看见XML文件中的数据结构,怎样通过程序
获得呢?
msxml我试过了,不会用。
 
看看我的这段代码吧!
procedure TForm1.Button1Click(Sender: TObject);
var
Node: IDOMNode;
begin
Memo1.Lines.Clear;
Node := XMLDocument1.DOMDocument.childNodes[1];
Memo1.Lines.Add(Node.nodeName);
Memo1.Lines.Add(Node.firstChild.nodeName);
Memo1.Lines.Add(
Node.firstChild.firstChild.childNodes[1].nodeName);

{
while Assigned(Node)do
begin
Memo1.Lines.Add(
Node.nodeName + ':' + Node.nodeValue);
Node := Node.nextSibling;
end;
}
end;
 
XML文档是新一代的Web数据格式。它可以用树的形式储存一切数据。
下面介绍一下TXMLDocument控件的一些用法:
已定义:
XMLDoc: TXMLDocument;
EncoderMIME: TIdEncoderMIME;
DecoderMIME: TIdDecoderMIME;
xn:IXMLNode;
f:TFileStream;
EncoderMIME和DecoderMIME是Indy控件中的Mime工具,用来把所有类型的字符串转换为Mime(Base64)的ASCII码,你用其他的编码方式也可以的,比如:UUE,XXE。
XN是XML文档的树结点。F是文件流。
首先,加载XML文档
XMLdoc.LoadFromFile(‘XML文档的文件名');
XMLdoc.Active:=true;
//使XML文档变为活动
再次,定位Xn在XML文档中的位置(假设是的二层的第四个节点)
xn:=XMLdoc.Node;
xn:=xn.ChildNodes.Nodes[1];
//节点数是从零开始的,所以要减一
xn:=xn.ChildNodes.Nodes[3];
接着,
增加下一级节点
xn:=xn.AddChild(‘新的节点名字’)
xn.Text:=’节点的文本内容’
xn.Attributes['节点的第一个属性']:=’属性值’
xn.Attributes['节点的第二个属性']:=’属性值’
修改节点,(节点的名字是不能改的)
xn.Text:=’新的文本内容’
xn.Attributes['节点的第二个属性']:=’ 新的属性值’
删除节点Xn
xn.ParentNode.ChildNodes.Delete(xn.ParentNode.ChildNodes.IndexOf(xn));
利用Xn.Text存放文件,
f:=TFileStream.Create('要存放的文件名',fmOpenRead);
xn.Text:=EncoderMime.Encode(f);
//转换格式,文件编码
f.Free;
解出Xn.Text中的文件,
f:=TFileStream.Create(‘目标文件名’,fmCreate);
DecoderMime.DecodeToStream(xn.Text,f);
f.Free;
最好利用Xn.attribute来增加一个属性来表示文件的编码方式,比如
xn.Attributes['Type']='Base64'
这样改上面的两个片段为:
xn.Attributes['Type']:='Base64';
f:=TFileStream.Create('要存放的文件名',fmOpenRead);
xn.Text:=EncoderMime.Encode(f);
f.Free;
if xn.IsTextElement //Xn中存在Text
then
if xn.HasAttribute('Type') then
//Xn中存在属性’Type’
if xn.Attributes['Type']='Base64' then
begin
f:=TFileStream.Create(‘目标文件名’,fmCreate);
DecoderMime.DecodeToStream(xn.Text,f);
f.Free;
end;
最后给出一个利用TTreeView来显示XML文档的所有树结构
XMLTree是TTreeView类
procedure TForm1.ReadXMLTree(RootTreeNode:TTreeNode;
XMLTreeNode:IXMLNode);
var i:integer;
c:TTreeNode;
begin
for i:=0 to XMLTreeNode.ChildNodes.Count-1do
begin
c:=XMLtree.Items.AddChild(RootTreeNode,XMLTreeNode.ChildNodes.Nodes.NodeName);
ReadXMLTree(c,XMLTreeNode.ChildNodes.Nodes);
end;
end;
使用方法
ReadXMLTree(nil,XMLdoc.Node);
 
我是想通过XMLDocument获得XML的结构与当中的数据,没有这么复杂吧!
 
你举个XML文档的例子,然后说明要获得什么信息。
因为XNL文档不一定是关系型的,泛泛而讲,不知道怎么回答。
 
to jsxjd:下面是xml文件,如果有其它方法获得结构与记录也可以啊
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly' rs:updatable='true'>
<s:AttributeType name='c0' rs:name='职务编号' rs:number='1' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'
rs:basetable='职务字典' rs:basecolumn='职务编号' rs:keycolumn='true'>
<s:datatype dt:type='string' dt:maxLength='4'/>
</s:AttributeType>
<s:AttributeType name='c1' rs:name='职务名称' rs:number='2' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'
rs:basetable='职务字典' rs:basecolumn='职务名称'>
<s:datatype dt:type='string' dt:maxLength='20'/>
</s:AttributeType>
<s:extends type='rs:rowbase'/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row c0='0001' c1='经理'/>
<z:row c0='0002' c1='项目经理'/>
<z:row c0='0003' c1='程序员'/>
</rs:data>
</xml>
 
先试试这个呢:
AdoTable1.loadFromFile('d:/xx.xml');
你的 XML 文档第一行要加上:
<?xml version="1.0" encoding='gb2312'?>
 
to jsxjd:
我的这个XML文件是通过ADOQUERY从ACCESS导出的,
用AdoTable1.loadFromFile('d:/xx.xml');可以导入,但是我想把数据写入新数据库,
所以必须知道XML的数据结构,好建立新的数据表,怎样获得啊?
关键是结构,我用XMLDocument控件,可以看到它的结构,可是怎样让程序知道知道啊!
急死了!
 
如果能导入,不就可以通过 AdoTable1.Fields 来得到数据结构!
 
to jsxjd:
不能通过XMLDocument获得吗?
 
可以,要熟悉以下这些内容:
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='#RowsetSchema'>
或者自己从各层节点中提取。
但我想熟悉上面的定义应该会方便些。
 
to jsxjd:
好难啊!没想到这么难!怎么理解上面的定义呢?XML的问题我研究了很久了,都烦了!
adotable的方法我诗了,已经可以了!谢谢了!
 
nibul,
留下mail和qq
 
to 老人家
nibul@sina.com
qq很少用的,公司不让上。41710031
 
说的如此详细,还不会? 请问你是从事软件还是硬件的
 
to friendship
不会就是不会,你可以给解答一下吗?
 
我要的是通过XMLDocument获得XML文件中的数据结构与数据内容,
往XML文件里写数据我早已经知道,通过ADO组件获得XML文件的数据结构与数据内容
我也知道了,我是想通过XMLDocument获得XML文件中的数据结构与数据内容。
在XMLDocument的向导中如果加载XML文件就可以看见XML文件中的数据结构,怎样通过程序
获得呢?
msxml我试过了,不会用。
 
//JavaScript脚本
var XmlSource=Document.XmlDocument;
var value='';
value=XmoSource.SelectSingleNode('总节点/第二级节点/....').text;
alert(value);
 
没有用过这个。关注。
>>>所以必须知道XML的数据结构,好建立新的数据表,怎样获得啊?
你非得由XML得到数据结构吗?
建立新的数据表你可以通过其他方法建立啊。比如通过SQL的脚本。
这样建立好了数据库,再通过ADO链接XML文件将数据导入新数据库即可。
 
后退
顶部