XmlReader:不读取兄弟子元素

时间:2017-03-26 10:43:24

标签: c# xml xmlreader

以下是代码:

string str = "<A><B>Apple</B><B>Mango</B></A>";

using (XmlReader xmlReader = XmlReader.Create(new StringReader(str)))
{
    while (xmlReader.Read())
    {
        if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "B")
        {
            Console.WriteLine(xmlReader.ReadElementContentAsString());
        }
    }
}

输出:

苹果

假设输出:

苹果
Manglo

你能帮我理解这段代码有什么问题吗?我如何获得假定的输出?

注意:我想用XmlReader实现这个目的

2 个答案:

答案 0 :(得分:2)

ReadElementContentAsString读取并推动读者进入下一个元素 因此,使用Read中的while,您正在跳过下一个B元素。

而是使用Value属性。

using (XmlReader xmlReader = XmlReader.Create(new StringReader(str)))
{
    while (xmlReader.Read())
    {
        if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "B")
        {
            xmlReader.Read(); // Next read will contain the value
            Console.WriteLine(xmlReader.Value);
        }
    }
}

如果您希望显示外部xml,请稍微使用它:

bool hasMore = xmlReader.Read();
while (hasMore)
{
    if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "B")
    {
        Console.WriteLine(xmlReader.ReadOuterXml());
    }
    else hasMore = xmlReader.Read();
}

答案 1 :(得分:1)

如果有人想知道如何为每个子节点获取OuterXml以及使用子节点值,可以使用以下代码:

for i from 1 to 10
  cb = -> console.log i
  set-timeout cb, i*1000