zoukankan      html  css  js  c++  java
  • windows phone中三种解析XML的方法


    需求如下,

    项目需要将一段xml字符串中的信息提取出来

    <?xml version=""1.0""  encoding=""UTF-8"" ?>
    <root>
      <responseHeader>
        <sequence>1397045886045</sequence>
        <timestamp>2014-04-09 20:12:29</timestamp>
        <version>1.0.0</version>
        <returnCode>0</returnCode>
        <errorMessage>成功</errorMessage>
      </responseHeader>
      <responsePage>
        <hasNextPage>false</hasNextPage>
        <hasPreviousPage>false</hasPreviousPage>
        <lastPageNumber>1</lastPageNumber>
        <totalCount>7</totalCount>
        <thisPageFirstElementNumber>1</thisPageFirstElementNumber>
        <thisPageLastElementNumber>7</thisPageLastElementNumber>
        <nextPageNumber>2</nextPageNumber>
        <previousPageNumber>0</previousPageNumber>
        <pageSize>20</pageSize>
        <thisPageNumber>1</thisPageNumber>
        <firstResult>0</firstResult>
      </responsePage>
      <hotpointInfoList>
        <hotpointInfo>
          <name>南京北极阁一号</name>
          <nasid>360721</nasid>
          <address>北极山庄1号</address>
          <province>250</province>
          <cityCode>320100</cityCode>
          <type>99</type>
          <longitude>118.7869</longitude>
          <latitude>32.0616</latitude>
          <isRecommend>0</isRecommend>
        </hotpointInfo>
        <hotpointInfo>
          <name>南京仙林大成名店动感地带旗舰营业厅</name>
          <nasid>276495</nasid>
          <address>仙林大成名店一层</address>
          <province>250</province>
          <cityCode>320100</cityCode>
          <type>99</type>
          <longitude>118.9169</longitude>
          <latitude>32.1037</latitude>
          <isRecommend>0</isRecommend>
        </hotpointInfo>
        <hotpointInfo>
          <name>南京工业职业技术学院</name>
          <nasid>373703</nasid>
          <address>南京市羊山路一号</address>
          <province>250</province>
          <cityCode>320100</cityCode>
          <type>99</type>
          <longitude>118.9319</longitude>
          <latitude>32.1241</latitude>
          <isRecommend>0</isRecommend>
        </hotpointInfo>
        <hotpointInfo>
          <name>南京星巴克凤凰书城店</name>
          <nasid>257778</nasid>
          <address>湖南路1号凤凰国际书城一层B铺位</address>
          <province>250</province>
          <cityCode>320100</cityCode>
          <type>99</type>
          <longitude>118.7785</longitude>
          <latitude>32.0705</latitude>
          <isRecommend>0</isRecommend>
        </hotpointInfo>
    </root>

    将所有的<hotpointInfo> Node 集合取出来

    构成List<Dictionary<string,string>>的数据结构

    我尝试使用了三种方法,实现这个需求

    1. 使用Regex正则表达式匹配
    2. 使用XElement类解析
    3. 使用XmlReader类解析

    使用Regex正则表达式匹配

                List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
                MatchCollection hotspotMatches = Regex.Matches(s,
                    "<hotpointInfo>.*?<name>(?<name>.*?)</name>.*?<address>(?<address>.*?)</address>.*?<cityCode>(?<city>.*?)</cityCode>.*?<type>(?<hottype>.*?)</type>.*?<longitude>(?<longitude>.*?)</longitude>.*?<latitude>(?<latitude>.*?)</latitude>.*?(.*?<coverageArea>(?<coverarea>.*?)</coverageArea>)?.*?</hotpointInfo>",
                    RegexOptions.Singleline);
                foreach (Match hotspotMatch in hotspotMatches)
                {
                    Dictionary<string, string> dictionary = new Dictionary<string, string>();
                    dictionary["name"] = hotspotMatch.Groups["name"].Value;
                    dictionary["nasid"] = hotspotMatch.Groups["nasid"].Value;
                    dictionary["address"] = hotspotMatch.Groups["address"].Value;
                    dictionary["province"] = hotspotMatch.Groups["province"].Value;
                    dictionary["cityCode"] = hotspotMatch.Groups["cityCode"].Value;
                    dictionary["type"] = hotspotMatch.Groups["type"].Value;
                    dictionary["longitude"] = hotspotMatch.Groups["longitude"].Value;
                    dictionary["latitude"] = hotspotMatch.Groups["latitude"].Value;
                    dictionary["isRecommend"] = hotspotMatch.Groups["isRecommend"].Value;
    
                    list.Add(dictionary);
                }

    使用XElement类解析

                List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
                XElement xElementFromString = XElement.Parse(s);
    
                var v = from hotpointInfoElement in xElementFromString.Element("hotpointInfoList").Elements("hotpointInfo")
                        select hotpointInfoElement;
    
                foreach (XElement xElement in v)
                {
                    Dictionary<string, string> dictionary = new Dictionary<string, string>();
                    dictionary["name"] = xElement.Element("name").Value;
                    dictionary["nasid"] = xElement.Element("nasid").Value;
                    dictionary["address"] = xElement.Element("address").Value;
                    dictionary["province"] = xElement.Element("province").Value;
                    dictionary["cityCode"] = xElement.Element("cityCode").Value;
                    dictionary["type"] = xElement.Element("type").Value;
                    dictionary["longitude"] = xElement.Element("longitude").Value;
                    dictionary["latitude"] = xElement.Element("latitude").Value;
                    dictionary["isRecommend"] = xElement.Element("isRecommend").Value;
    
                    list.Add(dictionary);
                }

    使用XmlReader类解析

                List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
    
                using (XmlReader reader = XmlReader.Create(new StringReader(s)))
                {
                    while (reader.Read())
                    {
                        if (reader.NodeType == XmlNodeType.Element)
                        {
                            if (reader.Name == "hotpointInfo")
                            {
                                XElement el = XNode.ReadFrom(reader) as XElement;
                                if (el != null)
                                {
                                    Dictionary<string, string> dictionary = new Dictionary<string, string>();
                                    dictionary["name"] = el.Element("name").Value;
                                    dictionary["nasid"] = el.Element("nasid").Value;
                                    dictionary["address"] = el.Element("address").Value;
                                    dictionary["province"] = el.Element("province").Value;
                                    dictionary["cityCode"] = el.Element("cityCode").Value;
                                    dictionary["type"] = el.Element("type").Value;
                                    dictionary["longitude"] = el.Element("longitude").Value;
                                    dictionary["latitude"] = el.Element("latitude").Value;
                                    dictionary["isRecommend"] = el.Element("isRecommend").Value;
    
                                    list.Add(dictionary);
                                }
                            }
                        }
                    }
                }



  • 相关阅读:
    Sudoku POJ 2676 [dfs]
    a>b和(*a).b
    lowbit()操作
    Anniversary party HDU 1520树形dp
    Lifting the Stone HDU 1115 求多边形的重心
    Boolean Expressions POJ 2106 【递归】
    Shaolin HDU 4585 STL map||Treap树
    取石子游戏 HDU 1527 威佐夫游戏
    A Simple Problem with Integers POJ 3468 区间修改线段树lazy—tag大法
    社会性网络软件SNS 帮助你认识比尔盖茨 java程序员
  • 原文地址:https://www.cnblogs.com/fifa0329/p/4536651.html
Copyright © 2011-2022 走看看