读取.xml文件
总是感觉很费劲
请xml达人给点代码片段
如下<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<!--流程定义-->
<Process>
  <task name="StartTask">
    <type>START</type>
    <locationX>140</locationX>
    <locationY>84</locationY>
    <pre_node />
    <post_node>AtomicTask_1</post_node>
  </task>
  <task name="AtomicTask_1">
    <type>ATOMIC</type>
    <locationX>304</locationX>
    <locationY>110</locationY>
    <pre_node>StartTask</pre_node>
    <post_node>EndTask</post_node>
  </task>
  <task name="EndTask">
    <type>END</type>
    <locationX>551</locationX>
    <locationY>96</locationY>
    <pre_node>AtomicTask_1</pre_node>
    <post_node />
  </task>
</Process>

解决方案 »

  1.   

    用xpath
    具体语法可以参见w3c可以用
    XmlNode.SelectSingleNodeXmlNode.SelectNodes
    两个方法
    看看msdn
      

  2.   

    有没有办法可以把 例如
    <task></task>
    的结点读取出来 获得一个结点的数组
    再从每个结点读取
    <type>
    <location>
    之类的属性
    ???????
      

  3.   

    XmlNode.SelectSingleNodeXmlNode.SelectNodes
    就可以实现你上面的思想
      

  4.   

    sqlcmdInsertInfor.ExecuteXmlReader().有读取xml的方法,自己看
      

  5.   

    http://www.cnblogs.com/weekzero/articles/178140.html 里面是在C#.net中如何操作XML
      

  6.   

    Xpath是一种好的方法另一种特简单的方法:楼主的XML结构比较清晰,所以直接用DataSet 的ReadXML方法就可以了,
    不信楼主只要用DataSet 打开它后绑定到DataGrid上,你会发现你下面的结点是个DataTable,
    type、locationX都是字段,可以直接通过操作table就完成目的了<?xml version="1.0" encoding="gb2312" standalone="yes"?>
    <!--流程定义-->
    <Process>
      <task name="StartTask">
        <type>START</type>
        <locationX>140</locationX>
        <locationY>84</locationY>
        <pre_node />
        <post_node>AtomicTask_1</post_node>
      </task>
      <task name="AtomicTask_1">
        <type>ATOMIC</type>
        <locationX>304</locationX>
        <locationY>110</locationY>
        <pre_node>StartTask</pre_node>
        <post_node>EndTask</post_node>
      </task>
      <task name="EndTask">
        <type>END</type>
        <locationX>551</locationX>
        <locationY>96</locationY>
        <pre_node>AtomicTask_1</pre_node>
        <post_node />
      </task>
    </Process>
      

  7.   

    用DataSet读取,建议楼主表name属性放到task的节点中如
      <task>
        <name>EndTask</name>
        <type>END</type>
        <locationX>551</locationX>
        <locationY>96</locationY>
        <pre_node>AtomicTask_1</pre_node>
        <post_node />
      </task>这样,实际上就是操作task表,想要操作name、type岂不是简单的很
      

  8.   

    using System;
    using System.Collections;
    using System.IO;
    using System.Xml;public class MyClass
    {
    public static void Main()
    {
    string xml = @"C:\Inetpub\wwwroot\TestAspx\XML\task.xml";
    if( !File.Exists( xml ))
    {
    throw new Exception("xml文件不存在!");
    }

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(xml);

    XmlNodeList nodeList;
    XmlNodeList nodeListChild;

    nodeList = xmlDoc.SelectNodes("/Process/task");

    if( nodeList == null )
    {
    Console.WriteLine("无节点!");
    return;
    }

    foreach(XmlNode xn in nodeList)//遍历所有子节点
    {
    XmlElement xe=(XmlElement)xn;

    Console.WriteLine( xe.GetAttribute("name"));

    nodeListChild = xn.ChildNodes;
    foreach(XmlNode xnChild in nodeListChild)//遍历所有子节点
    {
    Console.WriteLine( xnChild.InnerText );
    }

    Console.WriteLine();
    Console.WriteLine( " ********************************** ");
    Console.WriteLine();
    }
    Console.ReadLine();
    }

    }