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>

複数のルートを持つドキュメントを解析する必要があります。したがって、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生成は正常に見えます。ルート要素にのみ作成されます。しかし、あなたの意図は、複数のタスクを格納する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 に答える
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 に答える