求一个用XmlReader读XML字符串的例子
谢谢.
请给代码示范.
[解决办法]
System.Xml命名空间包含了一些最重要的XML类,其中最主要的类是和XML文档的读写操作相关的类。这些类中包括4个与读相关的类以及2个与写相关的类。它们分别是:XmlReader、XmlTextReader、XmlValidatingReader、XmlNodeReader、XmlWriter以及 XmlTextWriter。
XmlReader类是一个虚基类,它包含了读XML文档的方法和属性。该类中的Read方法是一个基本的读XML文档的方法,它以流形式读取XML文档中的节点(Node)。另外,该类还提供了ReadString、ReadInnerXml、ReadOuterXml和ReadStartElement等更高级的读方法。除了提供读XML文档的方法外,XmlReader类还为程序员提供了MoveToAttribute、MoveToFirstAttribute、MoveToContent、MoveToFirstContent、MoveToElement以及 MoveToNextAttribute等具有导航功能的方法。
XmlTextReader、XmlNodeReader以及XmlValidatingReader等类是从XmlReader类继承过来的子类。根据它们的名称,我们可以知道其作用分别是读取文本内容、读取节点和读取XML模式(Schemas)。
使用XmlTextReader
XmlTextReader reader=null;
try
{
string Fpath=Server.MapPath( "menu.xml ");
reader=new XmlTextReader(Fpath);
while(reader.Read())
{
if(reader.NodeType==XmlNodeType.Element)
{
if(reader.LocalName== "item ")
{
while(reader.Read())
{
if(reader.NodeType==XmlNodeType.Element)
{
switch(reader.Name)
{
case "message ":
Response.Write(reader.ReadElementString());
Response.Write( ": ");
continue;
case "submenu ":
Response.Write(reader.ReadElementString());
Response.Write( ": ");
continue;
case "u ":
Response.Write(reader.ReadElementString());
Response.Write( " <br> ");
break;
}
}
}
}
}
}
}
finally{
if(reader!=null)
reader.Close();
}
使用XmlNodeReader
XmlNodeReader reader=null;
try
{
string Fpath=Server.MapPath( "menu.xml ");
XmlDocument doc=new XmlDocument();
doc.Load(Fpath);
reader=new XmlNodeReader(doc);
if (reader.HasAttributes)
{
for (int i = 0; i < reader.AttributeCount; i++)
{
reader.MoveToAttribute(i);
//Response.Write(reader.Name);
if(reader.Name== "value ")
{
Response.Write( ": ");
Response.Write(reader.Value);
}
Response.Write( " <br> ");
}
}
}
finally{
if(reader!=null)
reader.Close();
}
[解决办法]
using System;
using System.IO;
using System.Xml;
public class Sample {
private const String filename = "items.xml ";
public static void Main() {
XmlTextReader reader = null;
try {
// Load the reader with the data file and ignore all white space nodes.
reader = new XmlTextReader(filename);
reader.WhitespaceHandling = WhitespaceHandling.None;
// Parse the file and display each of the nodes.
while (reader.Read()) {
switch (reader.NodeType) {
case XmlNodeType.Element:
Console.Write( " <{0}> ", reader.Name);
break;
case XmlNodeType.Text:
Console.Write(reader.Value);
break;
case XmlNodeType.CDATA:
Console.Write( " <![CDATA[{0}]]> ", reader.Value);
break;
case XmlNodeType.ProcessingInstruction:
Console.Write( " <?{0} {1}?> ", reader.Name, reader.Value);
break;
case XmlNodeType.Comment:
Console.Write( " <!--{0}--> ", reader.Value);
break;
case XmlNodeType.XmlDeclaration:
Console.Write( " <?xml version= '1.0 '?> ");
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
Console.Write( " <!DOCTYPE {0} [{1}] ", reader.Name, reader.Value);
break;
case XmlNodeType.EntityReference:
Console.Write(reader.Name);
break;
case XmlNodeType.EndElement:
Console.Write( " </{0}> ", reader.Name);
break;
}
}
}
finally {
if (reader!=null)
reader.Close();
}
}
} // End class
[Visual Basic, C#] 该示例使用文件 items.xml。
<?xml version= "1.0 "?>
<!-- This is a sample XML document -->
<!DOCTYPE Items [ <!ENTITY number "123 "> ]>
<Items>
<Item> Test with an entity: &number; </Item>
<Item> test with a child element <more/> stuff </Item>
<Item> test with a CDATA section <![CDATA[ <456> ]]> def </Item>
<Item> Test with an char entity: A </Item>
<!-- Fourteen chars in this element.-->
<Item> 1234567890ABCD </Item>
</Items>