如何检查元素标记是否为结束元素

3
例如,我有以下类型的条件:
if (reader.IsStartElement("element1"))
{
    while (true)
    {
        if (reader.IsStartElement("element2"))
        {
            // Doing stuff
            reader.ReadEndElement(); //closes element2 tag
        }
        else if (reader.IsStartElement("element3"))
        {
           // Doing stuff
           reader.ReadEndElement(); //closes element3 tag
        }
        else if ((!reader.IsStartElement("element2")) 
                && (!reader.IsStartElement("element3")) 
                && (!reader.IsEndElement("element1"))) // THIS IS MY ISSUE
        {
           throw new XmlException("exception");
        }
        else
        {
           reader.ReadEndElement(); //closes element1 tag
        }    
    }
}

我的XML使用以下格式编写:

<element1>
    <element2>
    </element2>
    <element3>
    </element3>
</element1>

我想要做的是,如果在element1内读取的元素既不是element2也不是element3,并且不是element1的结束元素标签,则抛出我编写的异常。问题是我找不到一种检查XmlReader中结束元素标签的方法。我可以使用reader.IsStartElement来检查开始元素标签,但无法使用reader.IsEndElement。是否有其他方法可以检查类型是否为结束元素?

1
有更好的方法使用xmlreader读取xml。请查看我在以下帖子中的代码:http://stackoverflow.com/questions/34274568/how-to-read-an-xml-file-by-using-xmlreader-in-c-sharp - jdweng
我认为那个链接可能已经失效了? - Dan
2个回答

5
您可以检查节点类型,然后使用reader.Name验证它是否为element1的结束标记。
if (reader.NodeType == XmlNodeType.EndElement)
{
    if(reader.Name == "element1")
    {
        //it's element1 end tag
    }
    else
    {
       //it's the end tag for something else
    }
}

有道理。如果这种情况下执行else if((!reader.IsStartElement("element2")) && (!reader.IsStartElement("element3")) && (!reader.Name != "element1"))不起作用或者是个坏主意吗?因为在这种情况下,我猜我不需要验证它是否是一个结束元素,如果我可以验证阅读器不是结束元素的名称,如果这样说的话。 - Tim
很酷。只是好奇。谢谢你的建议。 - Tim

2

您应该使用reader.Read()来遍历XML,并查看读取器的NodeType

XmlNodeType枚举包含ElementEndElement的值。


我需要在每个条件后使用reader.Read()才能移动到下一个元素吗? - Tim
当我尝试这样做时,它会抛出一个错误,说我不能在XmlNodeType中使用!运算符。我需要确定我正在查看的元素标记不是element1的结束标记... - Tim
你应该在while()条件中使用.Read(),而不是无限循环。请参考我链接页面上的示例。如果要将一个值与枚举进行比较,可以使用!=reader.NodeType != XmlNodeType.EndElement - JLRishe
太好了。感谢提供文档和建议。 - Tim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接