Joe*_*ith 19 c# xml linq whitespace
当我尝试使用LINQ XmlReader类解析XML时,我看到了奇怪的行为.下面的测试用例:看起来我是否使用XmlReader (XElement)XNode.ReadFrom(xmlReader)上的Read()方法之一,它错过bar了输入XML中的第二个元素.如果在</bar>和之间添加了任何空格,<bar>那么它将bar正确解析第二个元素.
有没有人知道为什么输入流搞砸了以及如何解决这个问题?
[Test]
[Explicit]
public void ShouldParseCorrectNumberOfElements()
{
var xml = @"<foo><bar>wtf</bar><bar>wtf2</bar></foo>";
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);
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 31
你正在调用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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9076 次 |
| 最近记录: |