Windows Phone7解析XML的2种方式

junwong 发布于 2012/06/14 14:16
阅读 1K+
收藏 2

对于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();

文章来自

WP7开发者:http://dev.ruanman.net


原文链接:http://www.cnblogs.com/chihaodong/archive/2012/06/08/2541238.html
加载中
返回顶部
顶部