当前位置:编程学习 > C#/ASP.NET >>

XmlDocument读xml

xml 如下  
<content>
  <head>
    <callSystem>1111</callSystem>
</head>
<body>
     <paramInfo>
       <paramCode>Id</paramCode>
       <paramValue>
    <value>1</value>
       </paramValue >
     </paramInfo>
     <paramInfo>
       <paramCode>易做图</paramCode>
       <paramValue>
    <value>2</value>
       </paramValue >
     </paramInfo>
</body>
</content>

实体类
public class AA
{
    public string Id{get;set;}
    public string 易做图{get;set;}
}

paramCode 对应实体类  paramValue对应实体类的值
这是方法  
public AA XmlToObject(string xml)
{
     XmlDocument doc=new XmlDocument();
     doc.LoadXML(xml);
     ////往下要怎么读这个xml到实体类啊
}

求大神帮忙给个例子!非常感谢
--------------------编程问答-------------------- 用xelement
XElement data=XElement.Parse(xml);
XElement  paramInfo= data.Element("body").Element("body").Elements("paramInfo");
foreach(var i in paramInfo)
{
//这里判断paramCode是id的给id 是易做图的给易做图
节点就是.Element() 属性就是.Attribute("")
他们都是XElement类 很简单
} --------------------编程问答-------------------- 可以使用Linq to XML,google一下一堆例子,贴一下我自己项目中的,你照葫芦画瓢吧
        /// <summary>
        /// Load xml file
        /// </summary>
        /// <param name="xmlFilePath"></param>
        /// <returns></returns>
        private void LoadXML(string filePath, XNamespace nameSpace)
        {
            if (string.IsNullOrEmpty(filePath))
            {
                MessageBox.Show("Please choose the xml file first!");
            }

            //casesElement = XElement.Load(filePath);
            XmlDocument doc = new XmlDocument();
            doc.Load(filePath);
            casesElement = XElement.Load(new XmlNodeReader(doc));
            //ns = "urn:perseus:profile:plugin";
            ns = nameSpace;
        }

        /// <summary>
        /// Get module name
        /// </summary>
        /// <returns></returns>
        private Dictionary<string, Dictionary<string, int>> GetModuleNameDic()
        {
            if (casesElement == null)
            {
                throw new Exception("Please load xml file first!");
            }

            Dictionary<string, Dictionary<string, int>> dic = new Dictionary<string, Dictionary<string, int>>();
            var docModule = from item in casesElement.Descendants(ns + "module")
                            select item.Element(ns + "displayName").Value;
            foreach (var itemModule in docModule)
            {
                string moduleName = string.Empty;
                if (!(itemModule + "").Equals(""))
                {
                    moduleName = itemModule;
                    dic.Add(moduleName, GetSuiteNameLst(moduleName));
                }
            }
            return dic;
        }
--------------------编程问答-------------------- 参考:http://msdn.microsoft.com/zh-cn/library/eh3exdc4(v=vs.90).aspx --------------------编程问答--------------------
引用 2 楼 zxz414644665 的回复:
可以使用Linq to XML,google一下一堆例子,贴一下我自己项目中的,你照葫芦画瓢吧
        /// <summary>
        /// Load xml file
        /// </summary>
        /// <param name="xmlFilePath"></param>
        /// <returns></returns>
        private void LoadXML(string filePath, XNamespace nameSpace)
        {
            if (string.IsNullOrEmpty(filePath))
            {
                MessageBox.Show("Please choose the xml file first!");
            }

            //casesElement = XElement.Load(filePath);
            XmlDocument doc = new XmlDocument();
            doc.Load(filePath);
            casesElement = XElement.Load(new XmlNodeReader(doc));
            //ns = "urn:perseus:profile:plugin";
            ns = nameSpace;
        }

        /// <summary>
        /// Get module name
        /// </summary>
        /// <returns></returns>
        private Dictionary<string, Dictionary<string, int>> GetModuleNameDic()
        {
            if (casesElement == null)
            {
                throw new Exception("Please load xml file first!");
            }

            Dictionary<string, Dictionary<string, int>> dic = new Dictionary<string, Dictionary<string, int>>();
            var docModule = from item in casesElement.Descendants(ns + "module")
                            select item.Element(ns + "displayName").Value;
            foreach (var itemModule in docModule)
            {
                string moduleName = string.Empty;
                if (!(itemModule + "").Equals(""))
                {
                    moduleName = itemModule;
                    dic.Add(moduleName, GetSuiteNameLst(moduleName));
                }
            }
            return dic;
        }
  没太看明白你这个例子! 能不能具体给简单按照我提供的给写一个啊! 非常谢谢 --------------------编程问答--------------------
引用 1 楼 lhx527099095 的回复:
用xelement
XElement data=XElement.Parse(xml);
XElement  paramInfo= data.Element("body").Element("body").Elements("paramInfo");
foreach(var i in paramInfo)
{
//这里判断paramCode是id的给id 是易做图的给易做图
节点就是.Element() 属性就是.Attribute("")
他们都是XElement类 很简单
}
 data.Element("body").Element("body").Elements("paramInfo"); 这句话是什么意思啊? --------------------编程问答-------------------- 给你写了一个:
            XmlDocument doc = new XmlDocument();
            doc.Load(@"D:\visual studio 2010\Projects\HelloWorld\TestPostData\bin\Debug\test.xml");
            XElement xElement = XElement.Load(new XmlNodeReader(doc));

            var paramInfos = from paramInfo in xElement.Elements("body").Elements("paramInfo")
                             select paramInfo;
            Dictionary<string, string> dicKeyValue = new Dictionary<string, string>();
            foreach (var paramInfo in paramInfos)
            {
                var keyItem = from item in paramInfo.Elements("paramCode") select item;
                string key = keyItem.FirstOrDefault().Value;

                var valueItem = from item in paramInfo.Elements("paramValue").Elements("value") select item;
                string value = valueItem.FirstOrDefault().Value;

                dicKeyValue.Add(key, value);
            }

            AA aa = new AA();
            aa.Id = dicKeyValue.ContainsKey("Id") ? dicKeyValue["Id"] : string.Empty;
            aa.易做图 = dicKeyValue.ContainsKey("易做图") ? dicKeyValue["易做图"] : string.Empty;
--------------------编程问答--------------------
引用 6 楼 zxz414644665 的回复:
给你写了一个:
            XmlDocument doc = new XmlDocument();
            doc.Load(@"D:\visual studio 2010\Projects\HelloWorld\TestPostData\bin\Debug\test.xml");
            XElement xElement = XElement.Load(new XmlNodeReader(doc));

            var paramInfos = from paramInfo in xElement.Elements("body").Elements("paramInfo")
                             select paramInfo;
            Dictionary<string, string> dicKeyValue = new Dictionary<string, string>();
            foreach (var paramInfo in paramInfos)
            {
                var keyItem = from item in paramInfo.Elements("paramCode") select item;
                string key = keyItem.FirstOrDefault().Value;

                var valueItem = from item in paramInfo.Elements("paramValue").Elements("value") select item;
                string value = valueItem.FirstOrDefault().Value;

                dicKeyValue.Add(key, value);
            }

            AA aa = new AA();
            aa.Id = dicKeyValue.ContainsKey("Id") ? dicKeyValue["Id"] : string.Empty;
            aa.易做图 = dicKeyValue.ContainsKey("易做图") ? dicKeyValue["易做图"] : string.Empty;


那你看看我这种写法哪有问题?
XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.LoadXml(xml);
            Dictionary<string, string> dict = new Dictionary<string, string>();
            foreach (XmlElement item in xmlDocument.GetElementsByTagName("paramInfo"))
            {
                dict[item["paramCode"].InnerText] = item["paramValue"].FirstChild.Value;
            }
AA aa=new AA()
aa.Id=dict["ID"];
aa.易做图=dict["易做图"]; --------------------编程问答--------------------
引用
那你看看我这种写法哪有问题?
XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.LoadXml(xml);
            Dictionary<string, string> dict = new Dictionary<string, string>();
            foreach (XmlElement item in xmlDocument.GetElementsByTagName("paramInfo"))
            {
                dict[item["paramCode"].InnerText] = item["paramValue"].FirstChild.Value;
            }
AA aa=new AA()
aa.Id=dict["ID"];
aa.易做图=dict["易做图"]; 

自己调试一下不就清楚了吗? --------------------编程问答--------------------
引用 8 楼 zxz414644665 的回复:
引用
那你看看我这种写法哪有问题?
XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.LoadXml(xml);
            Dictionary<string, string> dict = new Dictionary<string, string>();
            foreach (XmlElement item in xmlDocument.GetElementsByTagName("paramInfo"))
            {
                dict[item["paramCode"].InnerText] = item["paramValue"].FirstChild.Value;
            }
AA aa=new AA()
aa.Id=dict["ID"];
aa.易做图=dict["易做图"]; 

自己调试一下不就清楚了吗?


如果 这种情况
<paramInfo>
       <paramCode>易做图</paramCode>
       <paramValue>
           <value>1</value>
           <value>2</value>
       </paramValue >
</paramInfo>
附带两个值的你的那种写法好像也不行 --------------------编程问答--------------------
引用
如果 这种情况
<paramInfo>
       <paramCode>易做图</paramCode>
       <paramValue> 
           <value>1</value>
           <value>2</value>
       </paramValue >
</paramInfo>
附带两个值的你的那种写法好像也不行 

你只要明白了该如何处理这种东西就可以了,这个不是万能的,只是针对你上面给的xml写的代码,如果你需要万能的,要用到反射技术了。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,