【问题标题】:How to check if an element tag is end element如何检查元素标签是否为结束元素
【发布时间】:2016-07-29 01:15:37
【问题描述】:

例如,我有以下类型的条件:

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 内部读取的元素不是element2element3 并且不是element1 的结束元素标记然后抛出我有的异常书面。问题是我找不到检查 XmlReader 的结束元素标记的方法。我可以检查reader.IsStartElement,但不能检查reader.IsEndElement。有没有另一种方法可以检查类型是否是结束元素?

【问题讨论】:

标签: c# xml


【解决方案1】:

您可以检查 NodeType,然后使用 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")) 不起作用或是个坏主意?因为在这种情况下,我想我不需要验证它不是结束元素,如果我可以验证阅读器不是结束元素的名称(如果这是有道理的)
  • 酷。只是好奇。感谢您的提示
【解决方案2】:

您应该使用reader.Read() 来浏览XML,并查看读者的NodeType

XmlNodeType 枚举包含 ElementEndElement 的值。

【讨论】:

  • 我是否需要在每个条件之后使用 reader.Read() 才能越过该元素并进入下一个元素?
  • 另外,当我尝试这个时,它会抛出一个错误,说我不能使用!带有 XmlNodeType 的运算符。我需要确定我正在查看的元素标签不是 element1 的结束标签...
  • 您很可能应该在您的while() 条件中使用.Read(),而不是无限循环。请参阅我链接到的页面中的示例。要将值与枚举进行比较,您可以使用 !=: reader.NodeType != XmlNodeType.EndElement
  • 太棒了。感谢您的文档和建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 2022-12-16
  • 2019-12-10
  • 2020-02-21
  • 2011-09-27
相关资源
最近更新 更多