WP7平台常用方法的XML解析

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

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

2. LINQ to XML

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

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

你可能感兴趣的:(windows,android,xml,LINQ,平台,phone,output)