当我读取 xml 文件时,它会读取节点的副本

本文关键字:读取 节点 副本 xml 文件 | 更新日期: 2023-09-27 18:31:35

当我尝试读取我的xml文件时,它似乎读取了两次,我不确定如何解决此类错误。我以为我可以有某种循环,但我仍然迷路了。任何帮助将不胜感激。- 它正确写入 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;
        }

当我读取 xml 文件时,它会读取节点的副本

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

我不知道你真正想做什么,也没有XML的可见性,但这里是我大致会怎么做。

笔记:

  1. 我正在使用 XmlReader <- 更好的恕我直言(基类,所以华夫饼更少)
  2. 我正在使用"阅读器。值",不带 ToString(),因为它已经是一个字符串类型。
  3. 我将其更改为开关,因为我认为它们更干净,但是那里有很多XmlNodeType,您不希望必须/否则太多!!

法典:

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