我正在尝试读取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");
}