Csharp/C#教程:如果没有空格分隔符,为什么XmlReader会跳过所有其他元素?分享


如果没有空格分隔符,为什么XmlReader会跳过所有其他元素?

当我尝试使用LINQ XmlReader类解析XML时,我看到了奇怪的行为。 下面的测试用例:看起来我是否使用(XElement)XNode.ReadFrom(xmlReader)或XmlReader上的一个Read()方法,它错过了输入XML中的第二个bar元素。 如果在之间添加了任何空格,那么它将正确解析第二个bar元素。

有没有人知道为什么输入流搞砸了以及如何解决这个问题?

  [Test] [Explicit] public void ShouldParseCorrectNumberOfElements() { var xml = @"wtfwtf2"; XmlReader xmlReader = XmlReader.Create(new MemoryStream(Encoding.UTF8.GetBytes(xml))); int count = 0; xmlReader.MoveToContent(); while (xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "bar") { var element = xmlReader.ReadOuterXml(); Console.WriteLine("just got an " + element); count++; } } Assert.AreEqual(2, count); } 

您正在调用ReadOuterXml ,它将使用该元素并将“光标”放在下一个元素之前。 然后再次调用Read ,将光标移动(例如,移动到元素中的文本节点)。

这是你的循环的替代方案:

 while (!xmlReader.EOF) { Console.WriteLine(xmlReader.NodeType); if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "bar") { var element = xmlReader.ReadOuterXml(); Console.WriteLine("just got an " + element); count++; } else { xmlReader.Read(); } } 

您是否可以通过在while循环条件中调用Read()函数,然后在循环内调用ReadOuterXml()函数来跳过一行?

上述就是C#学习教程:如果没有空格分隔符,为什么XmlReader会跳过所有其他元素?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/952223.html

(0)
上一篇 2021年11月19日
下一篇 2021年11月19日

精彩推荐