对于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();
03
String xmlString =
@"<?xml version='1.0'?>
05
<Item>sub element<more/> cwj</Item>
09
using
(XmlReader reader = XmlReader.Create(
new
StringReader(xmlString)))
11
XmlWriterSettings ws =
new
XmlWriterSettings();
14
using
(XmlWriter writer = XmlWriter.Create(output, ws))
19
switch
(reader.NodeType)
21
case
XmlNodeType.Element:
22
writer.WriteStartElement(reader.Name);
24
case
XmlNodeType.Text:
25
writer.WriteString(reader.Value);
27
case
XmlNodeType.XmlDeclaration:
28
case
XmlNodeType.ProcessingInstruction:
29
writer.WriteProcessingInstruction(reader.Name, reader.Value);
31
case
XmlNodeType.Comment:
32
writer.WriteComment(reader.Value);
34
case
XmlNodeType.EndElement:
36
writer.WriteFullEndElement();
2. LINQ to XML
Linq to xml这点类似我们传统Win32上使用的MSXML中的DOM解析器,将整个XML文件映射到内存,对于XML的定位和编辑比较方便。对于创建XML文件来说使用方法为,
01
StringBuilder output =
new
StringBuilder();
03
XDocument srcTree =
new
XDocument(
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"
)
17
XDocument doc =
new
XDocument(
20
from el
in
srcTree.Element(
"Root"
).Elements()
21
where ((
string
)el).StartsWith(
"data"
)
26
output.Append(doc + Environment.NewLine);
27
OutputTextBlock.Text = output.ToString();