其他的.NET 框架的类,比如XMLDocument类在读取XML数据方面表现如何呢?XMLDocument 类与XMLTextReader 类不同,它在存储器中创建整个XML文档的节点树。这样就可以随机的获得XML数据(与XMLTextReader 类获得数据的线性方式正好相反),并且在修改XML文件的数据和结构时,具有非常完美的灵活性。另外,XMLDocument允许执行XSLT 转变,不过,这些额外的功能是以运行速度的降低和系统资源的更多占用为代价的。
代码段1:XmlTextReader.aspx
<%@ Import Namespace="System.Xml" %>
<script language="C#" runat=server>
public class XmlDisplay
file://这个类读入并处理XML文件。
{
public string LoadDocument(String XmlFileName) {
XmlTextReader xmlReader = null;
StringBuilder html = new StringBuilder();
try {
file://创建XMLTextReader的实例。
xmlReader = new XmlTextReader(XmlFileName);
// 处理XML文件
html.Append(ProcessXml(xmlReader));
}
catch (XmlException ex){
html.Append("发生一个XML异常:" +
ex.ToString());
}
catch (Exception ex){
html.Append("发生一个普通异常:" +
ex.ToString());
}
finally
{
if (xmlReader != null)
xmlReader.Close();
}
return html.ToString();
}
private string ProcessXml(XmlTextReader xmlReader)
{
StringBuilder temp = new StringBuilder();
file://这个方法读入XML文件并生成输出的HTML文档。
while ( xmlReader.Read() )
{
// 处理一个元素节点的起始。
if (xmlReader.NodeType == XmlNodeType.Element)
{
file://忽略<people>和<person>元素
if ((xmlReader.Name != "person") && (xmlReader.Name != "people"))
{
file://如果是一个<category>元素,开始一个新的段落
if ( xmlReader.Name == "category" )
temp.Append("<p>");
file://添加元素名到输出中
temp.Append( xmlReader.Name + ": " );
}
}
// 处理文本节点
else if (xmlReader.NodeType == XmlNodeType.Text)
temp.Append(xmlReader.Value + "<br>");
file://处理元素节点的结尾
else if (xmlReader.NodeType == XmlNodeType.EndElement)
{
file://如果是<email>节点,添加结束段落的标记
if ( xmlReader.Name == "email" )
temp.Append("</p>");
}
}//结束while循环
return temp.ToString();
} file://结束ProcessXML方法
} file://结束XmlDisplay类
private void Page_Load(Object sender, EventArgs e){
file://创建XmlDisplay类的实例
XmlDisplay XmlDisplayDemo = new XmlDisplay();
output.InnerHtml = XmlDisplayDemo.LoadDocument(Server.MapPath("XMLData.xml"));
}
</script>
<html>
<head>
</head>
<body>
<h2>演示XmlTextReader类</h2>
<div id="output" runat="server"/>
</body>
</html>
1 static void Main(string[] args)
2 {
3 DateTime d1 =DateTime.Now;
4 XmlDocumentTest();
5 DateTime d2 =DateTime.Now;
6 TimeSpan ts =d2-d1 ;
7
8 Console.WriteLine(ts.TotalMilliseconds) ;
9 Console.Read() ;
10
11 }
12
13
14 public static string XmlFileName = "../../XML/1.xml";
15
16 private static void XmlTextReaderTest()
17 {
18 XmlTextReader reader = new XmlTextReader(XmlFileName);
19 while (reader.Read() )
20 {
21 bool exit =false;
22 switch(reader.NodeType)
23 {
24 case XmlNodeType.Element :
25 break;
26 case XmlNodeType.Text :
27 if (reader.Value=="last")
28 {
29 exit=true;
30 }
31 break;
32 case XmlNodeType.EndElement :
33 break;
34 default:
35 break;
36 }
37 if(exit)
38 {
39 return;
40
41 }
42
43 }
44 }
45
46 private static void XmlDocumentTest()
47 {
48 XmlDocument xd =new XmlDocument() ;
49 xd.Load(XmlFileName) ;
50 XmlNode node = xd.SelectSingleNode("/people/person[category='last']");
51 Console.Write(node.Name) ;
52 }
![]() 没有任何图片文章 |