WP7平台常用方法的XML解析

来源:互联网 发布:python模拟登录qq邮箱 编辑:程序博客网 时间:2024/06/05 04:18

对于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,下面给出一个简单的例子。

01StringBuilder output = new StringBuilder();
02 
03String xmlString = @"<?xml version='1.0'?>
04<Items>
05<Item>sub element<more/> cwj</Item>
06</Items>";
07 
08// 创建一个XmlReader实例,这点类似Android平台上的SAXParser实例通过SAXParserFactory创建。
09using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
10{
11XmlWriterSettings ws = new XmlWriterSettings();
12ws.Indent = true;
13 
14using (XmlWriter writer = XmlWriter.Create(output, ws))
15{
16 
17while (reader.Read())
18{
19switch (reader.NodeType)
20{
21case XmlNodeType.Element: // 类似startElement()在Android的SAXParser类中。
22writer.WriteStartElement(reader.Name);
23break;
24case XmlNodeType.Text: //解析节点内容
25writer.WriteString(reader.Value);
26break;
27case XmlNodeType.XmlDeclaration:
28case XmlNodeType.ProcessingInstruction: //解析声明
29writer.WriteProcessingInstruction(reader.Name, reader.Value);
30break;
31case XmlNodeType.Comment: //解析注释
32writer.WriteComment(reader.Value);
33break;
34case XmlNodeType.EndElement: // 类似endElement()在SAXParser类中
35 
36writer.WriteFullEndElement();
37break;
38}
39}
40}
41}

2. LINQ to XML

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

01StringBuilder output = new StringBuilder();
02 
03XDocument srcTree = new XDocument(
04new XComment("注释内容"),
05new XElement("Root",
06new XElement("Child1""data1"),
07new XElement("Child2""data2"),
08new XElement("Child3""data3"),
09new XElement("Child2""data4"),
10new XElement("Info5""info5"),
11new XElement("Info6""info6"),
12new XElement("Info7""info7"),
13new XElement("Info8""info8")
14)
15);
16 
17XDocument doc = new XDocument(
18new XComment("注释"),
19new XElement("Root",
20from el in srcTree.Element("Root").Elements()
21where ((string)el).StartsWith("data")
22select el
23)
24); // 这里的语法比较特别类似传统DOM中的root.getElementsByTagName(ITEM);
25 
26output.Append(doc + Environment.NewLine);
27OutputTextBlock.Text = output.ToString();
原创粉丝点击