如何解析不规则xml

guostong 华东师范 2014-01-14 06:02:10
不规则的 xml:

<code>0</code>
<message>Success</message>
<roles>
<role><name>Role1</name><selected>false</selected></role>
<role><name>Role2</name><selected>true</selected></role>
</roles>

前面是两个独立的字段
后面是一个表,这样的 xml 如何解析?

谢谢
...全文
66 点赞 收藏 3
写回复
3 条回复
wind_cloud2011 2014年01月14日
有时用dataset也很方便

tt.xml:
<?xml version="1.0" encoding="utf-8"?>
<root>
 <code>0</code>
 <message>Success</message>
<roles>
   <role>
     <name>Role1</name>
     <selected>false</selected>
   </role>
   <role> 
       <name>Role2</name>
        <selected>true</selected>
   </role>
 </roles>
</root>


  DataSet dt = new DataSet();
            dt.ReadXml("tt.xml");
            string code=dt.Tables["root"].Rows[0]["code"].ToString();
            string message = dt.Tables["root"].Rows[0]["message"].ToString();
            string name1 = dt.Tables["role"].Rows[0]["name"].ToString();
            string selected1 = dt.Tables["role"].Rows[0]["selected"].ToString();
            string name2 = dt.Tables["role"].Rows[1]["name"].ToString();
            string selected2 = dt.Tables["role"].Rows[1]["selected"].ToString(); 
回复 点赞
上海什么大学 2014年01月14日
楼上是正解。
回复 点赞
宝_爸 2014年01月14日
这个挺规则的啊,就是缺了一个root的element。下面的代码加入<xml></xml>作为root

 //test xml
            string input = @"<xml>" +
                            @"<code>0</code>" +
                           @" <message>Success</message>" +
                           @"<roles>" +
                           @"<role><name>Role1</name><selected>false</selected></role>" +
                           @"<role><name>Role2</name><selected>true</selected></role>" +
                           @"</roles>" +
                           @"</xml>";



            XmlSerializer serializer = new XmlSerializer(typeof(Response), "");
            using (TextReader reader = new StringReader(input))
            {
                Response result = serializer.Deserialize(reader) as Response;
            }



   [Serializable]
    [XmlRoot(ElementName= "xml")]
    public class Response
    {
        public int code { get; set; }
        public string message { get; set; }

        [XmlArrayItem(typeof(role))]
        public List<role> roles { get; set; }
    }

    [Serializable]
    public class role
    {
        public string name { get; set; }
        public bool selected { get; set; }
    }
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.4w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告