初始化一个XML reader,用一个格式良好的XML 字符串作为其输入:
string
xmlText
=
"
...
"
;
StringReader strReader = new StringReader(xmlText);
XmlTextReader reader = new XmlTextReader(strReader);
StringReader strReader = new StringReader(xmlText);
XmlTextReader reader = new XmlTextReader(strReader);
就是这么简单的事情,提问了好久居然都木有人会... 当然,也可能是没人愿意搭理偶.... orz
能够把string作为XmlTextReader的输入之后,一切就都好办多了
这个文章真是很赞~ 在.NET Framework中轻松处理XML数据 (From:http://blog.csdn.net/chyich/)
然后是灰常好用的遍历方法: http://www.cnblogs.com/bullfrog/archive/2006/01/29/324147.aspx
using
System;
using System.IO;
using System.Text;
using System.Xml; // 务必注意:不要忘了引入System.Xml命名空间
public class Sample
{
private const String filename = " c:\\mobilephoneinfo.xml " ; // 将要读取的文件路径(包括文件名)赋给字符串变量filename
public static void Main()
{
XmlTextReader reader = null ; // 声明一个XmlTextReader类型的变量reader,但还未创建实例
try
{
reader = new XmlTextReader(filename);
// 通过调用构造函数,创建一个XmlTextReader实例
reader.WhitespaceHandling = WhitespaceHandling.None;
// 将该XmlTextReader设置为忽略文本中的空格
while (reader.Read())
// 调用Read()方法,按顺序读取各节点信息
{
switch (reader.NodeType)
// 判断当前节点类型
{
case XmlNodeType.Element:
Console.Write( " <{0} " , reader.Name);
while (reader.MoveToNextAttribute())
{
Console.Write( " {0} = \ " { 1 }\ "" , reader.Name, reader.Value);
// 若当前节点为元素类型,则遍历当前节点中的所有属性并输出属性名及属性值
}
Console.Write( " > " );
// 若当前节点为元素类型,则输出元素名(包含前缀),并由一对尖括号括起来。
break ;
case XmlNodeType.Text:
Console.Write(reader.Value);
// 若当前节点为文本类型,则输出相应的值
break ;
case XmlNodeType.CDATA:
Console.Write( " <![CDATA[{0}]]> " , reader.Value);
// 若当前节点为CDATA,输出相应的文本
break ;
case XmlNodeType.ProcessingInstruction:
Console.Write( " <?{0} {1}?> " , reader.Name, reader.Value);
// 若当前节点为PI(处理指令),则输出PI的名称与具体的PI的文本
break ;
case XmlNodeType.Comment:
Console.Write( " <!--{0}--> " , reader.Value);
// 若节点类型为注释,则输出注释
break ;
case XmlNodeType.XmlDeclaration:
Console.Write( " <? xml {0} ?> " , reader.Value);
// 若节点类型为Xml文档声明,则输出声明
break ;
case XmlNodeType.Document:
break ;
case XmlNodeType.DocumentType:
Console.Write( " <!DOCTYPE {0} [{1}] " , reader.Name, reader.Value);
// 此种情况多在内部DTD中出现
break ;
case XmlNodeType.EntityReference:
Console.Write(reader.Name);
// 若当前节点为实体引用(典型的如 > 等)
break ;
case XmlNodeType.EndElement:
Console.Write( " </{0}> " , reader.Name);
// 若当前节点为结束元素,则输出元素名,并由</ 与 > 括起来
break ;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
if (reader != null )
{
reader.Close();
// 若reader不为空,关闭reader(事先判断reader是否为空很重要,若由于某些原因reader这个实例没有被成功创建,直接调用reader的Close()方法就会出现错误。)
}
Console.ReadLine();
}
}
} // End class
using System.IO;
using System.Text;
using System.Xml; // 务必注意:不要忘了引入System.Xml命名空间
public class Sample
{
private const String filename = " c:\\mobilephoneinfo.xml " ; // 将要读取的文件路径(包括文件名)赋给字符串变量filename
public static void Main()
{
XmlTextReader reader = null ; // 声明一个XmlTextReader类型的变量reader,但还未创建实例
try
{
reader = new XmlTextReader(filename);
// 通过调用构造函数,创建一个XmlTextReader实例
reader.WhitespaceHandling = WhitespaceHandling.None;
// 将该XmlTextReader设置为忽略文本中的空格
while (reader.Read())
// 调用Read()方法,按顺序读取各节点信息
{
switch (reader.NodeType)
// 判断当前节点类型
{
case XmlNodeType.Element:
Console.Write( " <{0} " , reader.Name);
while (reader.MoveToNextAttribute())
{
Console.Write( " {0} = \ " { 1 }\ "" , reader.Name, reader.Value);
// 若当前节点为元素类型,则遍历当前节点中的所有属性并输出属性名及属性值
}
Console.Write( " > " );
// 若当前节点为元素类型,则输出元素名(包含前缀),并由一对尖括号括起来。
break ;
case XmlNodeType.Text:
Console.Write(reader.Value);
// 若当前节点为文本类型,则输出相应的值
break ;
case XmlNodeType.CDATA:
Console.Write( " <![CDATA[{0}]]> " , reader.Value);
// 若当前节点为CDATA,输出相应的文本
break ;
case XmlNodeType.ProcessingInstruction:
Console.Write( " <?{0} {1}?> " , reader.Name, reader.Value);
// 若当前节点为PI(处理指令),则输出PI的名称与具体的PI的文本
break ;
case XmlNodeType.Comment:
Console.Write( " <!--{0}--> " , reader.Value);
// 若节点类型为注释,则输出注释
break ;
case XmlNodeType.XmlDeclaration:
Console.Write( " <? xml {0} ?> " , reader.Value);
// 若节点类型为Xml文档声明,则输出声明
break ;
case XmlNodeType.Document:
break ;
case XmlNodeType.DocumentType:
Console.Write( " <!DOCTYPE {0} [{1}] " , reader.Name, reader.Value);
// 此种情况多在内部DTD中出现
break ;
case XmlNodeType.EntityReference:
Console.Write(reader.Name);
// 若当前节点为实体引用(典型的如 > 等)
break ;
case XmlNodeType.EndElement:
Console.Write( " </{0}> " , reader.Name);
// 若当前节点为结束元素,则输出元素名,并由</ 与 > 括起来
break ;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
if (reader != null )
{
reader.Close();
// 若reader不为空,关闭reader(事先判断reader是否为空很重要,若由于某些原因reader这个实例没有被成功创建,直接调用reader的Close()方法就会出现错误。)
}
Console.ReadLine();
}
}
} // End class
这是一位仁兄写的使用dataset 的code... 暂时不用,以后学习一下 - =
http://space.cnblogs.com/question/14738/
dataset
static
void
Main(
string
[] args)
{
GetXMLDate(Environment.CurrentDirectory + " \\demo2010.xml " , " xm " , " 吴 " );
Console.ReadKey();
}
private static void GetXMLDate( string xmlPath, string column, string filter)
{
DataSet dataSet = new DataSet();
dataSet.ReadXml(xmlPath);
DataRow[] rows = (dataSet.Tables[ 0 ].Select( string .Format( " {0}='{1}' " ,column,filter)));
foreach (DataRow dr in rows)
{
Console.WriteLine(dr[ " bmch " ]);
}
}
{
GetXMLDate(Environment.CurrentDirectory + " \\demo2010.xml " , " xm " , " 吴 " );
Console.ReadKey();
}
private static void GetXMLDate( string xmlPath, string column, string filter)
{
DataSet dataSet = new DataSet();
dataSet.ReadXml(xmlPath);
DataRow[] rows = (dataSet.Tables[ 0 ].Select( string .Format( " {0}='{1}' " ,column,filter)));
foreach (DataRow dr in rows)
{
Console.WriteLine(dr[ " bmch " ]);
}
}