以下是代码:
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实现这个目的
答案 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