如何跳转到EndElement?

时间:2016-05-31 05:56:35

标签: c# xml xmlreader

我有下一个xml:

<work><pageSetup paperSize="9"><a foo="aa"/></pageSetup></work>

我用:

运行元素
using (XmlReader reader = XmlReader.Create(myFile.xml))
{
    while (reader.Read())
    {
        Console.WriteLine(reader.Name + " " + reader.NodeType);
        if (reader.Name == "pageSetup") reader.Skip();
    }
 }

我想跳到&lt; / PAGESETUP&GT; EndElement(当“光标”在&lt; pageSetup&gt;上时),但Skip()方法跳过整个元素及其EndElemet 。 (这是Skip()方法的正确行为,如https://msdn.microsoft.com/en-us/library/aa720634(v=vs.71).aspx中所述: Skip方法移动当前元素。如果节点类型是XmlNodeType.Element,则调用Skip将移动元素的所有内容和元素结束标记。)

在这种情况下使用的合适方法是什么?

1 个答案:

答案 0 :(得分:1)

您只需继续致电Read(),直到Depth返回到您开始的节点。这样的东西应该工作(省略错误处理):

int startDepth = reader.Depth; // assume you're on the start element
if (!reader.IsEmptyElement) { // if it is an <empty /> element, there is no end
    reader.Read();
    while (reader.Depth > startDepth) reader.Read();
}