学了几种xml的读写方法,感觉够用了,但是最近突然发现一个问题,请大家稍稍帮忙看一下
XmlWriterSettings wset = new XmlWriterSettings();
wset.Indent = true;
 using(XmlTextReader xReader = new XmlTextReader(@"d:\test.xml", XmlNodeType.Document, null))
            {
                xReader.WhitespaceHandling = WhitespaceHandling.None;
                using (XmlWriter xWriter = XmlWriter.Create(@"d:\a.xml", wset))
                {
                    xWriter.WriteNode(xReader, false);//在这里出现错误了,提示根节点数据无效
  //“System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1.”
                    xWriter.Flush();
                }
            }
主要想知道为什么会出现这种错误
//-----------------------------------------
于是写了个例子测了一下发现XmlNodeType.Document这个节点不知道该怎么写
 private static void ReadXml(XmlReader reader)
        {
            try
            {
                // 解析文件,并显示每一个节点
                while (reader.Read())
                {
                    switch (reader.NodeType)
                    {
                        case XmlNodeType.Element:
                            if (reader.IsEmptyElement) // 空元素?
                            {
                                Console.WriteLine("<{0}/>", reader.Name);
                            }
                            else
                            {
                                Console.Write("<{0}", reader.Name);
                                if (reader.HasAttributes)   // 属性?
                                {
                                    while (reader.MoveToNextAttribute())
                                    {
                                        Console.Write(" {0}=\"{1}\"", reader.Name, reader.Value);
                                    }
                                }
                                Console.WriteLine(">", reader.Name);
                            }
                            break;
                        case XmlNodeType.Text:
                            Console.WriteLine(reader.Value);
                            break;
                        case XmlNodeType.CDATA:
                            Console.WriteLine("<![CDATA[{0}]]>", reader.Value);
                            break;
                        case XmlNodeType.ProcessingInstruction:
                            Console.WriteLine("<?{0} {1}?>", reader.Name, reader.Value);
                            break;
                        case XmlNodeType.Comment:
                            Console.WriteLine("<!--{0}-->", reader.Value);
                            break;
                        case XmlNodeType.XmlDeclaration:
                            Console.WriteLine("<?xml version='1.0'?>");
                            break;
                        case XmlNodeType.Document:
                            Console.WriteLine("<document {0} [{1}]>", reader.Name, reader.Value);
                            break;
                        case XmlNodeType.DocumentType:
                            Console.WriteLine("<!DOCTYPE {0} [{1}]>", reader.Name, reader.Value);
                            break;
                        case XmlNodeType.EntityReference:
                            Console.WriteLine(reader.Name);
                            break;
                        case XmlNodeType.EndElement:
                            Console.WriteLine("</{0}>", reader.Name);
                            break;
                    }
                }
            }
            catch (XmlException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
//-----------------------------------------
xml的结构
<?xml version="1.0" encoding="utf-8"?>
<document>
<root>
<Testclass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <TestProperty>privatestr</TestProperty>
</Testclass>
</root>
</document>有哪位大侠能帮忙解释下为什么会出现上面的错误么?还有那个xmldocument在xml里该怎么写啊

解决方案 »

  1.   

    没用过这方法读取XML  /// <summary>
            /// 获取指定目录下所有子节点的值
            /// </summary>
            /// <param name="strFileName">文件路径</param>
            /// <param name="nodeDir">节点目录</param>
            /// <returns></returns>
            public Hashtable GetNodeList(string strFileName, string nodeDir)
            {
                Hashtable strNodeList = new Hashtable();
                try
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.Load(strFileName);                XmlNodeList nodeList = xmlDoc.SelectSingleNode(nodeDir).ChildNodes;//获取bookstore节点的所有子节点                 foreach (XmlNode xn in nodeList)     //遍历所有子节点 
                    {
                        XmlElement xe = (XmlElement)xn;  //将子节点类型转换为XmlElement类型 
                        strNodeList.Add(xe.GetAttribute("id").ToString(), xe.InnerText.Trim());
                    }            }
                catch (Exception)
                {                throw;
                }
                return strNodeList;
            }
      

  2.   

    封装一个XML的操作类 不就OK了
    别每次 都去 这么麻烦的操作
      

  3.   

    问题已经解决了,是因为这种读取方式的第一个参数不是文件名而是具体的xml字符串,我out了,呵呵结贴