WP7平台常用方法的XML解析

鉴客 发布于 2012/02/24 00:33
阅读 944
收藏 1

对于XML数据的解析,WP7平台并没有提供SAXParser和DOMParser这两个常用的解析器,如果你过去是开发Android应用的,你可能发现在Windows Phone 7上解析XML还需要.Net Framework中专有的,比如XMLReader和 LINQ to XML parser这两种方法。

1. XML Reader

XmlReader解析速度比较快同时比较省内存,但是只读的无法修改XML的内容,同时没有缓存解析功能,在Android平台可以使用SAXParser类来解析,而XmlReader这点很类似SAXParser,下面给出一个简单的例子。

StringBuilder output = new StringBuilder(); 

String xmlString = @"<?xml version='1.0'?> 
<Items> 
<Item>sub element<more/> cwj</Item> 
</Items>"; 

// 创建一个XmlReader实例,这点类似Android平台上的SAXParser实例通过SAXParserFactory创建。 
using (XmlReader reader = XmlReader.Create(new StringReader(xmlString))) 
{ 
XmlWriterSettings ws = new XmlWriterSettings(); 
ws.Indent = true; 

using (XmlWriter writer = XmlWriter.Create(output, ws)) 
{ 

while (reader.Read()) 
{ 
switch (reader.NodeType) 
{ 
case XmlNodeType.Element: // 类似startElement()在Android的SAXParser类中。
writer.WriteStartElement(reader.Name); 
break; 
case XmlNodeType.Text: //解析节点内容
writer.WriteString(reader.Value); 
break; 
case XmlNodeType.XmlDeclaration: 
case XmlNodeType.ProcessingInstruction: //解析声明 
writer.WriteProcessingInstruction(reader.Name, reader.Value); 
break; 
case XmlNodeType.Comment: //解析注释
writer.WriteComment(reader.Value); 
break; 
case XmlNodeType.EndElement: // 类似endElement()在SAXParser类中

writer.WriteFullEndElement(); 
break; 
} 
} 
} 
}

2. LINQ to XML

Linq to xml这点类似我们传统Win32上使用的MSXML中的DOM解析器,将整个XML文件映射到内存,对于XML的定位和编辑比较方便。对于创建XML文件来说使用方法为,

StringBuilder output = new StringBuilder(); 

XDocument srcTree = new XDocument( 
new XComment("注释内容"), 
new XElement("Root", 
new XElement("Child1", "data1"), 
new XElement("Child2", "data2"), 
new XElement("Child3", "data3"), 
new XElement("Child2", "data4"), 
new XElement("Info5", "info5"), 
new XElement("Info6", "info6"), 
new XElement("Info7", "info7"), 
new XElement("Info8", "info8") 
) 
); 

XDocument doc = new XDocument( 
new XComment("注释"), 
new XElement("Root", 
from el in srcTree.Element("Root").Elements() 
where ((string)el).StartsWith("data") 
select el 
) 
); // 这里的语法比较特别类似传统DOM中的root.getElementsByTagName(ITEM); 

output.Append(doc + Environment.NewLine); 
OutputTextBlock.Text = output.ToString();
加载中
返回顶部
顶部