<?xml version="1.0" encoding="GB2312"?>
<RESPONSE>
<A1>
<VERSION>2.0</VERSION>
<SRC>2000</SRC>
<ROUTE>00000</ROUTE>
<OBJ>3100</OBJ>
<RANGE>01</RANGE>
<FLAG>Y</FLAG>
</A1>
<B1>
  <COMMAND>QUERY</COMMAND>
  <VERSION>2.0</VERSION>
  <DATA ID="04001">
    <STATE>1/100</STATE>
    <R>
      <F MC="姓名" VALUE="张三" />
      <F MC="曾用名" VALUE="小黑" />
      <F MC="性别" VALUE="男" />
      <F MC="民族" VALUE="汉" />
      <F MC="出生日期" VALUE="19780820" />
      <F MC="出生地" VALUE="青岛" />
      <F MC="现籍" VALUE="大连" />
    </R>
    <R>
      <F MC="姓名" VALUE="李四" />
      <F MC="曾用名" VALUE="猪八戒" />
      <F MC="性别" VALUE="男" />
      <F MC="民族" VALUE="汉" />
      <F MC="出生日期" VALUE="19790118" />
      <F MC="出生地" VALUE="沈阳" />
      <F MC="现籍" VALUE="沈阳" />
    </R>
    <R>
      <F MC="姓名" VALUE="李红" />
      <F MC="曾用名" VALUE="红玫瑰" />
      <F MC="性别" VALUE="女" />
      <F MC="民族" VALUE="汉" />
      <F MC="出生日期" VALUE="19800625" />
      <F MC="出生地" VALUE="北京" />
      <F MC="现籍" VALUE="廊坊" />
    </R>
  </DATA>
</B1>
</RESPONSE>
上述XML格式本人没有读取的经验,请各路高手指点,我向把该XML读进Dataset,并绑定在datagrid中进行数据展示。最终的显示效果如下,请高手们指点迷津。谢谢!!!姓名  曾用名  性别  民族  出生日期  出生地  现籍
张三  小黑    男    汉    19780820  青岛    大连
李四  猪八戒  男    汉    19790118  沈阳    沈阳
李红  红玫瑰  女    汉    19800625  北京    廊坊

解决方案 »

  1.   

    你这个并不是通过DataSet.WriteXml存的,那你需要通过xmlreader去读,然后进行分析。
      

  2.   

    to 通过xmlreader怎样分析啊?不就是逐个分析节点,参看msdn的例子
      

  3.   

    #region  显示 xml 文件的源内容
            public void XmlReaderTest()
            {
                XmlDocument document = new XmlDocument();
                document.Load("article.xml");    //装载 xml 文件            XmlNodeReader reader = new XmlNodeReader(document);   //快速读取 xml 文件            this.Show();            int depth = -1;  //初始化缩进变量            while (reader.Read())  //while 循环,直到读取所有的 xml 文件内容
                {
                    switch (reader.NodeType)  //取得当前读取到的 xml 文件内容的类型 
                    {
                        case XmlNodeType.Element:  //如类型是元素
                            depth++;
                            TabOutput(depth);  //缩进处理
                            consoleTextBox.Text += "<" + reader.Name + ">" + "\r\n";   //输出当前的元素名称
                            if (reader.IsEmptyElement)
                                depth--;
                            break;                    case XmlNodeType.Comment:  //如类型是注释
                            TabOutput(depth);
                            consoleTextBox.Text += "<!--" + reader.Value + "-->\r\n";
                            break;                    case XmlNodeType.Text:   //如类型是内容
                            TabOutput(depth);
                            consoleTextBox.Text += "\t" + reader.Value + "\r\n";
                            break;
                        
                        case XmlNodeType.XmlDeclaration :  //如类型是 xml 文件声明
                            TabOutput(depth);
                            consoleTextBox.Text += "<?" + reader.Name + reader.Value + "?> \r\n";
                            break;                    case XmlNodeType.EndElement:  //如类型是元素结束标记
                            TabOutput(depth);
                            consoleTextBox.Text += "</" + reader.Name + "> \r\n";
                            depth--;
                            break;                        
                    }
                }        }
            #endregion
      #region 从源xml文档中 复制一个完整的 xml ,且画出 dcom 树
            private void BuildTree(XmlNode xmlSourceNode,
                XmlNode document, TreeNode treeNode)
            {
                XmlNodeReader nodeReader = new XmlNodeReader(xmlSourceNode);  //创建一读取器            XmlNode currentNode = null;            TreeNode newNode = new TreeNode();            XmlNodeType modifiedNodeType;  //指定节点的类型            while (nodeReader.Read())
                {
                    modifiedNodeType = nodeReader.NodeType;  //取得当前节点的类型                if (modifiedNodeType == XmlNodeType.EndElement)  //元素结束标记
                        modifiedNodeType = XmlNodeType.Element;  //把 元素的首标记赋值                currentNode = copy.CreateNode(modifiedNodeType, nodeReader.Name, nodeReader.NamespaceURI);                switch (nodeReader.NodeType)
                    {
                        case XmlNodeType .Text:
                            newNode.Text = nodeReader.Value;
                            treeNode.Nodes.Add(newNode);
                            ((XmlText)currentNode).AppendData(nodeReader.Value);
                            document.AppendChild(currentNode);
                            break;                    case XmlNodeType .EndElement :
                            document = document.ParentNode;
                            treeNode = treeNode.Parent;
                            break;                    case XmlNodeType .Element :
                            if (!nodeReader.IsEmptyElement)
                            {
                                newNode.Text = nodeReader.Name;
                                treeNode.Nodes.Add(newNode);                            treeNode = newNode;                            document.AppendChild(currentNode);
                                document = document.LastChild;
                            }
                            else
                            {
                                newNode.Text = nodeReader.NodeType.ToString();
                                treeNode.Nodes.Add(newNode);
                                document.AppendChild(currentNode);
                            }
                            break;                    default :
                            newNode.Text = nodeReader.NodeType.ToString();
                            treeNode.Nodes.Add(newNode);
                            document.AppendChild(currentNode);
                            break;
                    }
                    newNode = new TreeNode();            }
                xmlTreeView.ExpandAll();
                xmlTreeView.Refresh();
            }
            #endregion
       private void button3_Click(object sender, EventArgs e)
            {
                DataSet myDs = new DataSet();            try
                {
                    FileStream fin;
                    fin = new FileStream("XMLFile1.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                    myDs.ReadXml(fin);
                    fin.Close();
                }
                catch (Exception ex)
                {
                    textBox1.Text= ex.Message;
                }            //绑定修改前的XML
              //  PreData.DataSource = myDs.Tables[0].DefaultView;   //指定数据源
              //  PreData.DataBind();   //绑定数据            //当DS当中增加新行
                //在这里我们可以看到,其实原XML数据里面的属性,我们一样可以直接使用DataRow[]数组来得到,而不仅仅是节点
                DataRow newRow = myDs.Tables[0].NewRow();
                newRow["id"] = "3";
                newRow["userName"] = "new user";
                newRow["userPass"] = "new passwd";
                myDs.Tables[0].Rows.Add(newRow);            //将myDs的改变写入XML
                try
                {
                    FileStream dataOut;
                    dataOut = new FileStream("XMLFile1.xml", FileMode.Open, FileAccess.Write, FileShare.ReadWrite);
                    myDs.WriteXml(dataOut, XmlWriteMode.WriteSchema);
                    dataOut.Close();
                }
                catch (Exception ex)
                {
                    textBox1.Text = ex.Message;
                }            //绑定修改后的XML
             //   NextData.DataSource = myDs.Tables[0].DefaultView;   //指定数据源
             //   NextData.DataBind();   //绑定数据            myDs.Dispose();
            }
        }
      

  4.   

    强烈建议楼主使用Xslt转换xml文件的格式,在对转换后的文件使用DataSet或DataTable进行加载,
    在.net Framework 2.0中,使用XslCompiledTransform类取代了原来1.x中的XslTransform类
    http://blog.csdn.net/zhzuo/archive/2006/04/19/669095.aspx
      

  5.   

    我给出的xml格式是xslt的吗?为什么要进行转换?
      

  6.   

    #region Public Static 读取XML配置文件
    /// <summary>
    /// 读取XML配置文件
    /// </summary>
    /// <param name="XMLPath">XML配置文件的路径</param>
    /// <returns>返回的数据集</returns>
    public static DataSet ReadXMLSetting(string XMLPath)
    {
    if(File.Exists(XMLPath) == false)
    {
    return null;
    }
    else
    {
    DataSet dsXML = new DataSet(); try
    {
    dsXML.ReadXml(XMLPath);
    return dsXML;
    }
    catch
    {
    return null;
    }
    } }
    #endregion