XmlReader.Name 后续调用中返回空字符串
本文关键字:返回 字符串 调用 Name XmlReader | 更新日期: 2023-09-27 18:31:17
我目前正在使用 .NET 3.5 for Windows CE。XmlReader 实现是自定义的,属于设备制造商。考虑到这一点,XmlReader可能只是很糟糕。
我有以下测试代码:
[TestFixture]
public class XmlUtilsTest
{
private const string EXAMPLE_XML =
"<Level1>"
+ "<Level2>"
+ "</Level2>"
+ "<Level2>"
+ "<Level3>Some text</Level3>"
+ "</Level2>"
+ "</Level1>";
[Test]
public void GetElementsAtPathTest()
{
IEnumerable<XmlReader> results = XmlUtils.GetElementsAtPath(EXAMPLE_XML, "Level1", "Level2");
XmlReader[] readers = results.ToArray();
Assert.AreEqual(2, readers.Length);
Assert.AreEqual("Level2", readers[0].Name);
Assert.AreEqual("Level2", readers[1].Name);
}
}
对于以下方法:
public static IEnumerable<XmlReader> GetElementsAtPath(string xml, params string[] path)
{
using (XmlReader reader = new XmlReader(xml))
{
if (!MoveToElementAtPath(reader, path))
yield break;
string siblingName = path[path.Length - 1];
do
{
XmlReader output = reader.ReadSubtree();
output.Read();
PrintLine(output.Name + " " + output.NodeType);
yield return output;
}
while (reader.ReadToNextSibling(siblingName));
}
}
在我的 do-while 循环中打印给了我预期的输出:
Level2 Element
Level2 Element
但是,测试失败:
Failed : GetElementsAtPathTest
Expected string length 6 but was 0. Strings differ at index 0.
Expected: "Level2"
But was: <string.Empty>
不知何故,在运行方法和断言结果之间,XmlReader.Name 的状态发生了变化。
我想我在这里犯了一些愚蠢的错误,但我已经盯着这个看了几个小时,看不到任何明显的东西。有什么线索吗?
再战斗 30 分钟,结果发现 ReadSubtree() 没有返回一个新对象。通过在 IEnumerable 上调用 ToArray,测试无意中读取到文档的末尾。
//XmlReader output = reader.ReadSubtree();
XmlReader output = new XmlReader(reader.ReadOuterXml());