XmlReader.ReadToNextSibling不起作用

cap*_*gon 3 .net c# xmlreader

我正在尝试读取xml文档,但XmlReader.ReadToNextSibling不能像在此MSDN文档中所宣传的那样工作

这是一个控制台示例:

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这只输出一个项目:

货号:第1项

谁知道我怎么能让这个工作?

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

dri*_*iis 5

这是因为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");
}   
Run Code Online (Sandbox Code Playgroud)