XML文档内容:
<?xml version="1.0" encoding="gb2312"?>
<userss>
<users id="1" isAutoLogin="true">用户节点<loginname username="starrycheng" ID="1">用户名 </loginname></users>
</userss>然后:
private void button11_Click(object sender, EventArgs e)
  {
  string xmlFileName = Application.StartupPath + @"\Release\users.xml";
  DataTable dt = XMLHelper.CXmlToDataTable(xmlFileName);
  dataGridView1.DataSource = dt;
  }  /// <summary>
  /// 读取Xml文件信息,并转换成DataTable对象
  /// </summary>
  /// <param name="xmlFilePath">xml文江路径</param>
  /// <returns>DataTable对象</returns>
  public static DataTable CXmlToDataTable(string xmlFilePath)
  {
  return CXmlFileToDataSet(xmlFilePath).Tables[0];
  }
  /// <summary>
  /// 读取Xml文件信息,并转换成DataSet对象
  /// </summary>
  /// <res>
  /// DataSet ds = new DataSet();
  /// ds = CXmlFileToDataSet("/XML/upload.xml");
  /// </res>
  /// <param name="xmlFilePath">Xml文件地址</param>
  /// <returns>DataSet对象</returns>
  public static DataSet CXmlFileToDataSet(string xmlFilePath)
  {
  if (!string.IsNullOrEmpty(xmlFilePath))
  {
  string path = xmlFilePath;
  StringReader StrStream = null;
  XmlTextReader Xmlrdr = null;
  try
  {
  XmlDocument xmldoc = new XmlDocument();
  //根据地址加载Xml文件
  xmldoc.Load(path);  DataSet ds = new DataSet();
  //读取文件中的字符流
  StrStream = new StringReader(xmldoc.InnerXml);
  //获取StrStream中的数据
  Xmlrdr = new XmlTextReader(StrStream);
  //ds获取Xmlrdr中的数据
  ds.ReadXml(Xmlrdr);
  return ds;
  }
  catch (Exception e)
  {
  throw e;
  }
  finally
  {
  //释放资源
  if (Xmlrdr != null)
  {
  Xmlrdr.Close();
  StrStream.Close();
  StrStream.Dispose();
  }
  }
  }
  else
  {
  return null;
  }
  }
在DataGridView中显示的结果是:
               第一列       第二列
表头(列名行)    id      isAutoLogin
第一行(列值)    1          true
问题:这是怎么从XML中取的值,路径指向的是“整个XML”文档啊???为什么只取出了“users”节点的属性,生成了DataTable,而不去取它的根节点“userss”和它的子节点“loginname”的属性???

解决方案 »

  1.   

    根据XML嵌套关系,在DataSet生成了多个表,该例中 利用users_Id外键关联两表关系你可以查看下 ds.Tables[1]
      

  2.   

    XML中,你users有子节点,就别写文本了,需要添加name的话,可以添加一个属性 Name='用户节点'
    <?xml version="1.0" encoding="gb2312"?>
    <userss>
    <users id="1" isAutoLogin="true" Name="用户节点"><loginname username="starrycheng" ID="1">用户名 </loginname></users>
    </userss>
      

  3.   



    谢谢您,谢谢。
    <?xml version="1.0" encoding="gb2312"?>
    <userss>
    <users id="1" isAutoLogin="true" Name="用户节点"></users>
    <loginname username="starrycheng" ID="1">用户名 </loginname>
    </userss>如果是这样的平行关系呢?两个节点的属性不同,这是几张表???
      

  4.   

    楼上的意思是一个userss节点应该代表一个表的吧