XmlTextReader的节点读取方式

本文详细介绍了使用.NET的XmlTextReader进行XML文件读取时的节点解析方式,通过实例展示了如何遍历XML文档中的每个节点,并解释了XmlTextReader如何处理空白节点。
XmlTextReader的节点读取方式比较特别,下面举例:
None.gif<?xml version="1.0" encoding="utf-8" ?> 
None.gif
<EmpRecordsData>
None.gif    
<Ecode Id="E0001" EmployeeName="Michael Perry">
None.gif        
<EmpDetails DateofJoin="02-02-1999" Grade="A" salary="1750"/>
None.gif    
</Ecode>
None.gif    
<Ecode Id="E0002" EmployeeName="Jenifer Carell">
None.gif        
<EmpDetails DateofJoin="03-22-1999" Grade="B" salary="2500"/>
None.gif    
</Ecode>
None.gif
</EmpRecordsData>

输出结果为:
第n次调用XmlTextReader.Reader()的次数 + XmlTextReader.Name + XmlTextReader.NodeType

输出处理程序:
None.gif            XmlTextReader myReader = new XmlTextReader("E:\\MyFiles\\C#\\Employee Records System\\Employee Records System\\EmpRec.xml");
None.gif
None.gif            
int i;
None.gif            
string str = "";
None.gif            
for (i=1!myReader.EOF; i++)
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif{
InBlock.gif                myReader.Read();
InBlock.gif                str 
+= "" + i + "次Read,节点Name:" + myReader.Name + ",节点类型:" + myReader.NodeType + "\r";
ExpandedBlockEnd.gif            }

None.gif                
None.gif            StreamWriter sw 
= new StreamWriter("D:\\test.txt"false, System.Text.Encoding.GetEncoding("gb2312"));
None.gif            sw.Write(str);
None.gif            sw.Close();
None.gif


输出结果:
第1次Read,节点Name:xml,节点类型:XmlDeclaration
第2次Read,节点Name:,节点类型:Whitespace
第3次Read,节点Name:EmpRecordsData,节点类型:Element
第4次Read,节点Name:,节点类型:Whitespace
第5次Read,节点Name:Ecode,节点类型:Element
第6次Read,节点Name:,节点类型:Whitespace
第7次Read,节点Name:EmpDetails,节点类型:Element
第8次Read,节点Name:,节点类型:Whitespace
第9次Read,节点Name:Ecode,节点类型:EndElement
第10次Read,节点Name:,节点类型:Whitespace
第11次Read,节点Name:Ecode,节点类型:Element
第12次Read,节点Name:,节点类型:Whitespace
第13次Read,节点Name:EmpDetails,节点类型:Element
第14次Read,节点Name:,节点类型:Whitespace
第15次Read,节点Name:Ecode,节点类型:EndElement
第16次Read,节点Name:,节点类型:Whitespace
第17次Read,节点Name:EmpRecordsData,节点类型:EndElement
第18次Read,节点Name:,节点类型:None


这说明,他是按下面读取的:
比如有一个元素:
<city>Shenzhen</city>
上面它会理解为3个节点;即使节点中没有内容也同样如此.
而且不仅如此,如上面程序反映,所有元素之间的空白处都同样理解为节点,比如
<city>Shenzhen</city>
<city>Hainan</city>
这里的第一个</city>与第二个<city>之间, 同样理解为一个空白节点.


上面只是了解以下.NET此类处理节点的方式,在程序中为了避免出错最好还是用
循环+判断节点Name和NodeType来判断.
 

转载于:https://www.cnblogs.com/wddavid/archive/2005/08/12/213541.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值