当我读取xml文件时,它会读取节点的重复项

时间:2012-04-19 16:01:27

标签: c# xml winforms xmlreader

当我尝试阅读我的xml文件时,它似乎读了两遍,我不确定如何修复这样的错误。我以为我可以有某种循环,但我仍然输了。任何帮助将不胜感激ty。 - 它正确写入xml文件,但在读取时会出现重复。

String workingDir = Directory.GetCurrentDirectory();
XmlTextReader textReader = new XmlTextReader(workingDir + @"\xmldoc.xml");

Console.WriteLine("BaseURI:" + textReader.BaseURI);
textReader.Read();

while (textReader.Read())
{
    if (textReader.Name == "test")
    {

        textReader.Read();
        XmlNodeType nType = textReader.NodeType;

        if (nType == XmlNodeType.Text)
        {
            //   label.Text = textReader.Value.ToString();
            Label l = new Label();
            System.Drawing.Point l1 = new System.Drawing.Point(15, 13 + a);
            l.Location = l1;
            l.Text = textReader.Value.ToString();

            a += 20;
        }

2 个答案:

答案 0 :(得分:0)

我不知道你真正想要做什么,也不知道你的XML,但这里大概是我会怎么做。

注意:

  1. 我正在使用XmlReader< - 更好的恕我直言(基类,所以没有华夫饼干)
  2. 我正在使用没有ToString()的“reader.Value”,因为它已经是一个字符串类型。
  3. 我把它改成了一个开关,因为我觉得它们更干净,但是那里有很多XmlNodeTypes你不想要if / else多了!!!
  4. 代码:

            XmlReader reader = XmlReader.Create("books.xml");
            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element: // The node is an element.
                        //DO NOTHING
                        break;
                    case XmlNodeType.Text: //Display the text in each element.
                        //label.Text = reader.Value;
                        Label l = new Label();
                        System.Drawing.Point l1 = new System.Drawing.Point(15, 13 + a);
                        l.Location = l1;
                        l.Text = reader.Value;
                        a += 20;
                        break;
                    case XmlNodeType.EndElement: //Display the end of the element.
                        //DO NOTHING
                        break;
                }
            }
    

答案 1 :(得分:0)

是什么让您认为某些条目被阅读两次?如果是这种情况,还要检查此方法是否未被调用两次(在Visual Studio中使用shift + F12查找用法)。 此外,您在此处加入的代码似乎并不完整(没有变量'a'的声明)。您是否在if (textReader.Name == "test")下执行了一些可执行相同操作的代码?