0

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

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

3 回答 3

3

所有 XML 文档都必须有 1 个根元素,例如

<myroot>
   <foo>
   </foo>
</myroot>

您必须解析具有超过 1 个根的文档。所以 text1.xml 必须有类似的东西

<myroot>
   <foo>
   </foo>
</myroot>
<myotherroot>
   <bar>
   </bar>
</myotherroot>

而不是拥有

xWriter.WriteStartElement("Tasks");
xWriter.WriteStartElement("Title");

您需要将 Title 创建为 Tasks 的子元素(如果这是您想要的结构)。

于 2012-05-17T16:11:03.513 回答
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;
}

但我认为你的作家有问题。你写的一定比你告诉我们的要多,否则你不会有多个根节点的问题。您遗漏了任何代码吗?

于 2013-11-07T03:16:14.013 回答
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>
于 2012-05-17T16:16:03.007 回答