我正在尝试读取xml文档,但XmlReader.ReadToNextSibling不能按此MSDN Documentation上的说明进行工作

这是一个控制台示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;

namespace ConsoleTestApp
{
    class Program
    {
        static void Main(string[] args)
        {
            string xmlText = "<xmlRoot><group><item>Item 1</item><item>Item 2</item></group><group><item>Item 3</item><item>Item 4</item></group></xmlRoot>";

            using (XmlReader reader = XmlReader.Create(new StringReader(xmlText)))
            {
                reader.ReadToFollowing("item");
                do
                {
                    Console.WriteLine("Item: {0}", reader.ReadInnerXml());
                } while (reader.ReadToNextSibling("item"));
            }

            Console.WriteLine("Press any key to continue...");
            Console.Read();
        }
    }
}


这仅输出一项:


  项目:项目1


任何人都知道我如何使它工作?

请不要建议使用DOM模型(XmlDocument)。我不能,因为这些xml文件来自不同的来源,并且可以具有许多不同的名称空间,这是一个巨大的麻烦。我需要使这个工作。

最佳答案

这是因为ReadInnerXml也会使阅读器前进。因此,当您到达第一个ReadToNextSibling时,您将位于项目2上,并且没有下一个同级。

此代码将读取您的两个项目:

string xmlText = "<xmlRoot><group><item>Item 1</item><item>Item 2</item></group><group><item>Item 3</item><item>Item 4</item></group></xmlRoot>";

using (XmlReader reader = XmlReader.Create(new StringReader(xmlText)))
{
    reader.ReadToFollowing("item");
    do
    {
        Console.WriteLine("Item: {0}", reader.ReadInnerXml());
    } while (reader.Name == "item");
}

10-04 11:33