想问一下关于xml的一个问题

funxu 2011-08-18 09:07:21
学了几种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里该怎么写啊
...全文
175 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
funxu 2011-08-18
  • 打赏
  • 举报
回复
完全没人理啊,再顶一次
funxu 2011-08-18
  • 打赏
  • 举报
回复
自己顶下
funxu 2011-08-18
  • 打赏
  • 举报
回复
问题已经解决了,是因为这种读取方式的第一个参数不是文件名而是具体的xml字符串,我out了,呵呵结贴
ycproc 2011-08-18
  • 打赏
  • 举报
回复
封装一个XML的操作类 不就OK了
别每次 都去 这么麻烦的操作
熙风 2011-08-18
  • 打赏
  • 举报
回复
没用过这方法读取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;
}

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧