有多个根元素。第1行,第21位.XML错误

时间:2012-05-17 16:09:36

标签: c# xml

在我的代码中出错这是加载函数:

这是错误:有多个根元素。第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();

3 个答案:

答案 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;
}

但我觉得你的作家有问题。您必须写的不仅仅是在告诉我们,或者您不会遇到多个根节点的问题。你遗漏了什么代码?