asp.net 读取Xml文件(三级)遍历出所有的节点以及取出值

时间:2021-12-28 11:24:44
虽然百度上面很多这样的答案,但是我觉得不够清楚,思路也不清晰。给一个完整的思路。顺便我把Xml文件附上

<?xml version="1.0" encoding="utf-8" ?>
<book>
  <dengji id="C" name="初级">
    <xingweilingyu id="A" name="基础知识">
      <jiandingfanwei id="A" name="天然气基础知识">
        <jiandingdian id="001" name="天然气的组成" />
        <jiandingdian id="002" name="甲烷的物理性质" />
        <jiandingdian id="003" name="气田气" />
        <jiandingdian id="004" name="石油伴生气" />
        <jiandingdian id="005" name="凝析气田气" />
        <jiandingdian id="006" name="矿井气" />
        <jiandingdian id="007" name="净气" />
        <jiandingdian id="008" name="酸气" />
        <jiandingdian id="009" name="气体的密度" />
        <jiandingdian id="010" name="天然气的相对密度" />
        <jiandingdian id="011" name="热值的概念" />
        <jiandingdian id="012" name="高位热值" />
        <jiandingdian id="013" name="低位热值" />
        <jiandingdian id="014" name="几种燃料的热值换算" />
        <jiandingdian id="015" name="沸点" />
        <jiandingdian id="016" name="露点" />
        <jiandingdian id="017" name="爆炸极限" />
        <jiandingdian id="018" name="常见可燃气体的爆炸极限" />
        <jiandingdian id="019" name="气体的临界参数" />
        <jiandingdian id="020" name="水合物的生成" />
        <jiandingdian id="021" name="水露点的制定目的" />
      </jiandingfanwei>
    </xingweilingyu>
  </dengji>
</book>



1读取xml文件
  XmlDocument dom = new XmlDocument();
   dom.Load(@"D:\a.xml"); 

2遍历节点
大家有什么思路吗?

3 把这些属性存起来(到时候肯定是用的)
我把这些值存起来会插入到Excel文件的 有知道的朋友请说下思路。

5 个解决方案

#2


引用 1 楼 guwei4037 的回复:
XML解析,参考: http://blog.csdn.net/chinacsharper/article/details/9246627
生成Excel,参考: http://blog.csdn.net/chinacsharper/article/details/12999435


Xml解析,你的文档是一级的,我的有三级,咱俩的不同之处在那里,其实我就是想知道如何一级一级的遍历出来。属性值取出来保存成一个集合就可以了。因为我还要用呢。

生成excel我也看了下,我就看到了一个,你的是导出excel文件。是从datagridview导出来的,而我是要把循环遍历出来的XML文件的数据写入到excel的,Xml文件的格式就是树的格式。(tree)  我只是想具体问题具体分析。链接虽然好。但是交流更好。

#3


总体思路就是把xml内容,存放到实体对象,在把实体对象写到excel
/// <summary>
        /// <summary>
        /// xml 生成对象
        /// </summary>
        /// <typeparam name="T">对象</typeparam>
        /// <param name="path">xml路径</param>
        /// <param name="nodeName">节点名称,默认body</param>
        /// <returns>T对象</returns>
public static T XmlToT<T>(string path, string nodeName = "body") where T : class ,new()
        {
            using (Stream file = XmlDeserialize(path, nodeName))
            {
                T obj = new T();
                obj = XmlToListSerializer<T>(file);
                return obj; 
            }
        }

 /// <summary>
        /// stream to 对象
        /// </summary>
        /// <typeparam name="T">对象</typeparam>
        /// <param name="stream">stream</param>
        /// <returns>T对象</returns>
        public static T XmlToListSerializer<T>(Stream stream)
        {
            using (StreamReader sr = new StreamReader(stream, System.Text.Encoding.UTF8))
            {
                XmlSerializer ser = new XmlSerializer(typeof(T));
                var listsch = ser.Deserialize(sr);
                T result = (T)listsch;
                return result;
            }
        }



怎么把实体对象写到excel就很方便了。这个网上很多

#4


大致是这样的写法
        var data = XDocument.Load(txt);
        var t = data.Root.Element("MsgType").Value;
        var x = data.Root.Element("MsgType");
        var m = x.Element("Mei").Value;
        。。。。。。。。。

#5


引用 4 楼 sp1234 的回复:
大致是这样的写法
        var data = XDocument.Load(txt);
        var t = data.Root.Element("MsgType").Value;
        var x = data.Root.Element("MsgType");
        var m = x.Element("Mei").Value;
        。。。。。。。。。


你这要表达什么意思呢?看不明白。

#1


#2


引用 1 楼 guwei4037 的回复:
XML解析,参考: http://blog.csdn.net/chinacsharper/article/details/9246627
生成Excel,参考: http://blog.csdn.net/chinacsharper/article/details/12999435


Xml解析,你的文档是一级的,我的有三级,咱俩的不同之处在那里,其实我就是想知道如何一级一级的遍历出来。属性值取出来保存成一个集合就可以了。因为我还要用呢。

生成excel我也看了下,我就看到了一个,你的是导出excel文件。是从datagridview导出来的,而我是要把循环遍历出来的XML文件的数据写入到excel的,Xml文件的格式就是树的格式。(tree)  我只是想具体问题具体分析。链接虽然好。但是交流更好。

#3


总体思路就是把xml内容,存放到实体对象,在把实体对象写到excel
/// <summary>
        /// <summary>
        /// xml 生成对象
        /// </summary>
        /// <typeparam name="T">对象</typeparam>
        /// <param name="path">xml路径</param>
        /// <param name="nodeName">节点名称,默认body</param>
        /// <returns>T对象</returns>
public static T XmlToT<T>(string path, string nodeName = "body") where T : class ,new()
        {
            using (Stream file = XmlDeserialize(path, nodeName))
            {
                T obj = new T();
                obj = XmlToListSerializer<T>(file);
                return obj; 
            }
        }

 /// <summary>
        /// stream to 对象
        /// </summary>
        /// <typeparam name="T">对象</typeparam>
        /// <param name="stream">stream</param>
        /// <returns>T对象</returns>
        public static T XmlToListSerializer<T>(Stream stream)
        {
            using (StreamReader sr = new StreamReader(stream, System.Text.Encoding.UTF8))
            {
                XmlSerializer ser = new XmlSerializer(typeof(T));
                var listsch = ser.Deserialize(sr);
                T result = (T)listsch;
                return result;
            }
        }



怎么把实体对象写到excel就很方便了。这个网上很多

#4


大致是这样的写法
        var data = XDocument.Load(txt);
        var t = data.Root.Element("MsgType").Value;
        var x = data.Root.Element("MsgType");
        var m = x.Element("Mei").Value;
        。。。。。。。。。

#5


引用 4 楼 sp1234 的回复:
大致是这样的写法
        var data = XDocument.Load(txt);
        var t = data.Root.Element("MsgType").Value;
        var x = data.Root.Element("MsgType");
        var m = x.Element("Mei").Value;
        。。。。。。。。。


你这要表达什么意思呢?看不明白。