在我的代码中出错这是加载函数:
这是错误:有多个根元素。第1行,第21位
我希望有人可以指导我朝着正确的方向前进。
private void button11_Click(object sender, EventArgs e)
{
XmlTextReader reader = new XmlTextReader("text1.xml");
XmlNodeType type;
while (reader.Read())
{
type = reader.NodeType;
if (type == XmlNodeType.Element)
{
if (reader.Name == "Title")
{
reader.Read();
textBox12.Text = reader.Value;
}
}
while (reader.Read())
{
if (reader.Name == "Description")
{
reader.Read();
textBox11.Text = reader.Value;
}
}
}
这是创建XML文件的代码:
XmlTextWriter xWriter = new XmlTextWriter("text1.xml", Encoding.UTF8);
xWriter.WriteStartElement("Tasks");
xWriter.WriteStartElement("Title");
xWriter.WriteString(textBox1.Text); // textbox.text
xWriter.WriteEndElement(); // title
xWriter.WriteStartElement("Description");
xWriter.WriteString(textBox2.Text); // textbox.text
xWriter.WriteEndElement(); // description end
xWriter.WriteStartElement("Date");
string val = "10/10/2010";
dateTimePicker1.Value = Convert.ToDateTime(val);
xWriter.WriteString(val); // textbox.text
xWriter.WriteEndElement(); // description end
xWriter.WriteEndElement(); // close tasks
xWriter.Close();
答案 0 :(得分:3)
所有XML文档必须具有完全1个根元素,例如
<myroot>
<foo>
</foo>
</myroot>
您必须解析具有多个root的文档。所以text1.xml必须有类似
的东西<myroot>
<foo>
</foo>
</myroot>
<myotherroot>
<bar>
</bar>
</myotherroot>
而不是
xWriter.WriteStartElement("Tasks");
xWriter.WriteStartElement("Title");
你需要创建Title作为Tasks的子元素(如果那就是你想要的结构)。
答案 1 :(得分:1)
您的XML生成看起来很好。它仅在根元素上创建。但我想你的意图是拥有一个存储多个任务的XML。您必须创建类似于此的XML:
<Tasks> <!-- The actual root -->
<Task>
<Title></Title>
<Description></Description>
<Date></Date>
</Task>
<Task>
<Title></Title>
<Description></Description>
<Date></Date>
</Task>
...
</Tasks>
答案 2 :(得分:1)
此代码将读取您正在编写的XML:
XmlDocument doc = new XmlDocument();
doc.Load("text1.xml");
var taskElement = doc.ChildNodes.OfType<XmlElement>().FirstOrDefault(x => x.Name == "Tasks");
if (taskElement != null)
{
var taskElements = taskElement.ChildNodes.OfType<XmlElement>().ToList();
var titleElement = taskElements.FirstOrDefault(x => x.Name == "Title");
var descElement = taskElements.FirstOrDefault(x => x.Name == "Description");
if (titleElement != null)
textBox12.Text = titleElement.InnerText;
if (descElement != null)
textBox11.Text = descElement.InnerText;
}
但我觉得你的作家有问题。您必须写的不仅仅是在告诉我们,或者您不会遇到多个根节点的问题。你遗漏了什么代码?