+ -
当前位置:首页 → 问答吧 → XML解析,跪求大侠解决!!!(高分)

XML解析,跪求大侠解决!!!(高分)

时间:2011-12-23

来源:互联网

XML code

<root>
    <List>
        <Item>
            <IP>192.168.11.13</IP>
            <IP>192.168.11.14</IP>
        </Item>
        <Item>
            <IP>192.168.11.16</IP>
            <IP>192.168.11.17</IP>
        </Item>
    </List>
</root>



xml内容如上。

最终需要将得到的内容保存到List<string>当中。

最后要得到的结果是:
192.168.11.13,192.168.11.14为一条数据,插入到List<string>当中
192.168.11.16,192.168.11.17为一条数据,插入到List<string>当中

最终List<string>中的大小为2个。

求解!!!!!!!多谢大侠帮助!

作者: xwguan   发布时间: 2011-12-23

自己做作业

作者: mabaolin   发布时间: 2011-12-23

C# code


            XElement xeRoot = XElement.Parse("你的XML数据");
            XElement xeList = xeRoot.Element("List");
            List<String> list = new List<String>();

            foreach (XElement xeItem in xeList.Elements("Item"))
            {
                String ips = "";

                foreach (XElement xeIP in xeItem.Elements("IP"))
                {
                    if (!String.IsNullOrEmpty(ips))
                    {
                        ips += ",";
                    }

                    ips += xeIP.Value;
                }

                list.Add(ips);
            }

作者: mayswind   发布时间: 2011-12-23

C# code
        List<string> ss = new List<string>();
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(Server.MapPath("~/test.xml"));
        XmlNodeList items = xmlDoc.SelectNodes(@"//Item");
        foreach (XmlNode item in items)
            ss.Add(item.ChildNodes[0].InnerText + "," + item.ChildNodes[1].InnerText);
        foreach (string s in ss)
            Response.Write(s + "<br/>");

输出:
192.168.11.13,192.168.11.14
192.168.11.16,192.168.11.17

作者: dalmeeme   发布时间: 2011-12-23

C# code
/// <summary>
/// 获取IP list
/// </summary>
/// <param name="xmlFileName">xml文件名</param>
/// <returns></returns>
private List<string> GetList(string xmlFileName)
{
    List<string> _list = new List<string>();
    XmlDocument doc = new XmlDocument();
    doc.Load(xmlFileName);
    try
    {
        XmlNode xn = doc.SelectSingleNode("root");
        XmlNode xn2 = xn.SelectSingleNode("List");
        XmlNodeList xns = xn2.SelectNodes("Item");
        foreach (XmlNode xnItem in xns)
        {
            XmlNodeList xnsIP = xnItem.SelectNodes("IP");
            if (xnsIP.Count > 0)
            {
                string ip = string.Empty;
                foreach (XmlNode xnIp in xnsIP)
                {
                    ip += xnIp.InnerText + ",";
                }
                _list.Add(ip.Remove(ip.Length - 1, 1));
            }
        }
        
    }
    catch
    {
        _list = null;
    }
    return _list;
}

作者: liao_ken   发布时间: 2011-12-23

引用 2 楼 mayswind 的回复:
C# code



XElement xeRoot = XElement.Parse("你的XML数据");
XElement xeList = xeRoot.Element("List");
List<String> list = new List<String>();

forea……


不好意思额,少说了点要求。

要求传入的节点为/root/list

而并不知道是Item或者IP,也许是其他的节点名称,但是格式是一样的。

即上面的xml也有可能是:
XML code

<root>
    <List>
        <Item1>
            <IP1>192.168.11.13</IP1>
            <IP1>192.168.11.14</IP1>
        </Item1>
        <Item1>
            <IP1>192.168.11.16</IP1>
            <IP1>192.168.11.17</IP1>
        </Item1>
    </List>
</root>

 


作者: xwguan   发布时间: 2011-12-23

C# code
        List<string> ss = new List<string>();
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(Server.MapPath("~/test.xml"));
        XmlNodeList items = xmlDoc.SelectNodes(@"/root/List/*");    //注意元素名称大小写
        foreach (XmlNode item in items)
            ss.Add(item.ChildNodes[0].InnerText + "," + item.ChildNodes[1].InnerText);
        foreach (string s in ss)
            Response.Write(s + "<br/>");

作者: dalmeeme   发布时间: 2011-12-23

如果每个项里面不止有2个ip地址,也可以:
C# code
        List<string> ss = new List<string>();
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(Server.MapPath("~/test.xml"));
        XmlNodeList items = xmlDoc.SelectNodes(@"/root/List/*");    //注意元素名称大小写
        string ip = "";
        foreach (XmlNode item in items)
        {
            foreach (XmlNode child in item.ChildNodes)
                ip += child.InnerText + ",";
            ss.Add(ip.TrimEnd(','));
            ip = "";
        }
        foreach (string s in ss)
            Response.Write(s + "<br/>");

作者: dalmeeme   发布时间: 2011-12-23

Linq2xml

 C# code
           var xml = @"<root>
                            <List>
                                <Item>
                                    <IP>192.168.11.13</IP>
                                    <IP>192.168.11.14</IP>
                                </Item>
                                <Item>
                                    <IP>192.168.11.16</IP>
                                    <IP>192.168.11.17</IP>
                                </Item>
                            </List>
                        </root>";

            var xdoc = XDocument.Parse(xml);
            var list = xdoc.Descendants("Item").Select(x => string.Join(",", x.Descendants("IP").Select(i => i.Value).ToArray()));
            foreach(var item in list)
                Console.WriteLine(item);

作者: fangxinggood   发布时间: 2011-12-23