首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

用XmlReader读XML字符串的例子

2012-03-25 
求一个用XmlReader读XML字符串的例子谢谢.请给代码示范.[解决办法]System.Xml命名空间包含了一些最重要的X

求一个用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: &#65; </Item>
<!-- Fourteen chars in this element.-->
<Item> 1234567890ABCD </Item>
</Items>

热点排行