<root>
  <ErrItem>
    <消息>未将对象引用设置到对象的实例1</消息>
    <![CDATA[   Parameter.cs:行号 75]]>
    <出错方法>Void UpdateSymbol(IFeatureLayer)</出错方法>
    <出错对象>数据库管理系统</出错对象>
    <!--2010-11-30 11:00:08-->
 </ErrItem>
 <ErrItem>
    <消息>未将对象引用设置到对象的实例2</消息>
    <![CDATA[   Parameter.cs:行号 75]]>
    <出错方法>Void UpdateSymbol(IFeatureLayer)</出错方法>
    <出错对象>数据库管理系统</出错对象>
    <!--2010-11-30 11:00:08-->
 </ErrItem>
</root>如何按每一个ErrItem读出以下相应信息:
未将对象引用设置到对象的实例1
   Parameter.cs:行号 75
Void UpdateSymbol(IFeatureLayer)
数据库管理系统
2010-11-30 11:00:08可以得到"ErrItem"节点(XmlNode),但是如何用这个XmlNode读取注释或者CDATA的值呢?
急!!!!!

解决方案 »

  1.   

    强制类型转换到XmlComment后获取其值即可
      

  2.   

    doc.Load("路径");
    XmlNode root = doc.ChildNodes[0];
    for (int i = 0; i < root.ChildNodes.Count; i++)
    {
        XmlNode errItem = root.ChildNodes[i];    for (int j = 0; j < errItem.ChildNodes.Count; j++)
    {
            XmlNode node = errItem.ChildNodes[j];
            if (node is XmlCDataSection)
            {
                string s = node.Value;
            }
    }
                        string innerText = errItem.InnerText;
    }
      

  3.   


    doc.Load("路径");
    XmlNode root = doc.ChildNodes[0];
    for (int i = 0; i < root.ChildNodes.Count; i++)
    {
        XmlNode errItem = root.ChildNodes[i];    for (int j = 0; j < errItem.ChildNodes.Count; j++)
        {
            XmlNode node = errItem.ChildNodes[j];
            if (node is XmlCDataSection)
            {
                string s = node.Value;
            }
        }
        string innerText = errItem.InnerText;
    }
      

  4.   

    XmlComment comment = doc.CreateComment("<![CDATA[ youstring ]]>");
      

  5.   

    注意XPath的写法:ErrItem/text()            var doc = new XmlDocument();
                doc.Load(@"c:\1.xml");
                var errorNodeList = doc.DocumentElement.SelectNodes("ErrItem/text()");
                foreach (XmlNode xn in errorNodeList)
                {
                    Console.WriteLine(xn.InnerText);
                }
      

  6.   

    以上的意思是读取ErrItem下所有Cdata的内容?
      

  7.   

    我的最后处理方法: string pjname = System.IO.Path.GetFileNameWithoutExtension(Application.ExecutablePath);
                foreach ( XmlNode node in doc.SelectNodes("/root/ErrItem") )
                    {
                    string cdata = node.SelectSingleNode("text()").InnerText;   //查看当前节点的 cadta文件
                    string ErrMessage = node.SelectSingleNode("消息").InnerText;
                    string ErrModel = node.SelectSingleNode("出错模块").InnerText;
                    string ErrMethod = node.SelectSingleNode("出错方法").InnerText;
                    string ErrObject = node.SelectSingleNode("出错对象").InnerText;
                    string dt = node.LastChild.InnerText;
                    DateTime time = Convert.ToDateTime(dt);  //查看时间
                   }