В настоящее время я работаю с .NET 3.5 для Windows CE. Реализация XmlReader является настраиваемой, принадлежащей производителю устройства. Имея это в виду, возможно, XmlReader просто отстой.XmlReader.Name, возвращающее пустую строку при последующих вызовах
У меня есть следующий код теста:
[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));
}
}
печать в моем сделай то время как петля дает мне выход я ожидаю:
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.
Я предполагаю, что я делаю какую-то глупую ошибку здесь, но я смотрел на это пару часов и не вижу ничего очевидного. Любые подсказки?