1.
XML
的解析方法
(XmlTextReader
的使用
)
[
yellowpage.xml]
<?xml version="1.0" encoding="UTF-8"?>
<results count="10" offset="1" total="226">
<result>
<ypinfoid>10704462</ypinfoid>
<title>北京大学</title>
<phone>01062752114</phone>
<address>北京市海淀区颐和园路5号</address>
<coordinates format="WGS-84">
<latitude>4426974</latitude>
<longitude>441565</longitude>
</coordinates>
<category>A700</category>
</result>
<result>
<ypinfoid>1317519</ypinfoid>
<title>北京大学邮电所</title>
<phone>01062613356</phone>
<address>北京市海淀区颐和园路5号</address>
<coordinates format="WGS-84">
<latitude>4427384</latitude>
<longitude>440632</longitude>
</coordinates>
</result>
<result>
<ypinfoid>1454200</ypinfoid>
<title>北京大学医学部</title>
<phone>01062091114</phone>
<address>北京市海淀区学院路38号</address>
<coordinates format="WGS-84">
<latitude>4426192</latitude>
<longitude>444850</longitude>
</coordinates>
</result>
</results>
以上面
yellowpage.xml
为例所示的
xml
数据
:
A. 方法一: 通过XmlTextReader.EOF流结尾作循环结束标志控制(
读取时要顺序读取)
private void ParserXML(XmlTextReader reader)
{
reader.WhitespaceHandling=WhitespaceHandling.None;
reader.MoveToContent(); //跳过声明和注释
if(reader.Name=="results"&&reader.HasAttributes) //读取属性
ReaderXmlAttribute(reader);
reader.MoveToElement(); //返回包含当前属性的结点
System.Console.WriteLine("***********======"+reader.Name);
try
{
reader.Read(); //跳过根Results结点
int count=0;
while(!reader.EOF&&reader.Name!="results")
{
// if(reader.Name=="results")break; System.Console.WriteLine("====="+reader.Name+(++count).ToString());
//以result开始,即以result开始是一条记录
reader.ReadStartElement("result");
reader.ReadStartElement("ypinfoid");
//读取该元素的文本值
System.Console.WriteLine("ypinfoid Text=="+reader.ReadString());
// ypinfoid的结束标志,并跳入下一节点
reader.ReadEndElement();
reader.ReadStartElement("title");
System.Console.WriteLine("title Text=="+reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("phone");
System.Console.WriteLine("phone Text=="+reader.ReadString().Trim());
reader.ReadEndElement();
reader.ReadStartElement("address"); System.Console.WriteLine("address Text=="+reader.ReadString().Trim());
reader.ReadEndElement();
if(reader.Name=="coordinates")
{
if(reader.HasAttributes)
{ Console.WriteLine("!!!!!!!!!!!!!!!!===attribue==="+reader.GetAttribute(0));
}
reader.ReadStartElement("coordinates"); reader.ReadStartElement("latitude");
System.Console.WriteLine("latitude Text=="+reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("longitude");
ystem.Console.WriteLine("longitude Text=="+reader.ReadString());
reader.ReadEndElement();
reader.ReadEndElement();
}
if(reader.Name=="category")
{
reader.ReadStartElement("category");
System.Console.WriteLine("latitude Text=="+reader.ReadString());
reader.ReadEndElement();
}
reader.ReadEndElement();
}
if(reader!=null)
{
reader.Close();
System.Console.WriteLine("Reader Closed State=******");
}
reader=null;
}
catch(Exception e){ }
}
B. 方法一: 通过XmlTextReader.Read()节点跳进和对名字判断进行循环控制
XmlTextReader reader = null;
try
{
//Load the reader with the XML file.
reader = new XmlTextReader("yellowpage.xml");
reader.WhitespaceHandling=WhitespaceHandling.None;
reader.MoveToContent();
if(reader.HasAttributes)
{
for(int i=0;i<reader.AttributeCount;i++)
{
reader.MoveToAttribute(i); Console.WriteLine("Name="+reader.Name+" :"+"value="+reader.Value);
}
}
int ii=0;
//Parse the XML and display the text content of each of the elements.
while (reader.Read()){
Console.WriteLine("===========================================");
Console.WriteLine("##### "+reader.Name+" :: "+(++ii).ToString());
if (reader.IsStartElement("result")&&!reader.IsEmptyElement)
{
while(reader.Read()&&reader.Name!="result")
{
Console.WriteLine("=========="+reader.Name);
if(reader.IsStartElement()&&!reader.IsEmptyElement)
{
string subName=reader.Name;
if(subName=="coordinates")
{
if(reader.HasAttributes)
{
for(int i=0;i<reader.AttributeCount;i++)
Console.WriteLine("coordinates Attribute = "+reader.GetAttribute(i));
}
while(reader.Read()&&reader.Name!="coordinates")
{
if(reader.IsStartElement("latitude")&&!reader.IsEmptyElement)
{
Console.WriteLine("latitude text==="+reader.ReadString());
} if(reader.IsStartElement("longitude")&&!reader.IsEmptyElement)
{
Console.WriteLine("longitude text==="+reader.ReadString());
}
}
}
else
{
string subText=reader.ReadString(); Console.WriteLine("*******===== "+subText);
if(subName=="ypinfoid")
{
Console.WriteLine("ypinfoid text==="+subText);
}
if(subName=="title")
{
Console.WriteLine("title text==="+subText);
}
if(subName=="phone")
{
Console.WriteLine("phone text==="+subText);
}
if(subName=="address")
{
Console.WriteLine("address text==="+subText);
}
if(subName=="category")
{
Console.WriteLine("category text==="+subText);
}
}
}
}
}
}
}
finally
{
if (reader != null)
reader.Close();
}
}













































































































































































































































































































































































































































































































