【问题标题】:C# XML parsing: how to differentiate between self-closing tag and other tags?C# XML 解析:如何区分自闭合标签和其他标签?
【发布时间】:2013-08-20 17:37:47
【问题描述】:

我在 ASP.NET C# 中使用“XmlTextReader”对象来读取 xml 文件。 在我的代码中,我真的需要区分像

这样的自结束标签
<img src="something" />

以及那些内部有元素并需要结束标签的元素,例如:

<div class="anything">
    <img src="something" />
</div>

我已经尝试过 HasValue 方法,但对我来说效果不佳。有没有其他方法可以在实际读取元素之前检测到这一点?

我可以使用 ReadElementContentAsString() 方法,但我并不想这样做。在进去之前我需要知道里面是否有东西。或者至少可以回去。

更新 这就是我阅读代码的方式

        reader.MoveToAttribute("id"); //I know all attributes
    if (reader.ReadAttributeValue())
        this.idField = reader.Value;


    reader.MoveToElement();
    bool goOn = true;
    while (goOn)
    {
        reader.Read();
        switch (reader.NodeType)
        {
            case XmlNodeType.Element:
                switch (reader.Name)
                {

                    case "div":
                        DivType newDivTypeItem = new DivType(reader);
                        this.itemsField.Add(newDivTypeItem);
                        this.itemsElementNameField.Add(ItemsChoiceType17.div);
                        break;
                    other cases...
                }
                break;
            case XmlNodeType.Text:
                this.textField.Add(reader.Value);
                break;
            case XmlNodeType.EndElement:
                goOn = false;
                break;
        }
    }

【问题讨论】:

  • 你真的需要使用XmlTextReader吗?如果您的 XML 很大,这是有道理的,否则我会使用 LINQ to XML...
  • 实际上,当我第一次需要解析 XML 时,我并不了解 LINQ to XML。但是,根据我的搜索,我选择了 XmlTextReader,到目前为止它工作得非常好。发布的问题是我现在唯一的问题。我猜LINQ to XML会更好。但是重做代码会困难得多。我很感激用 XmlTextReader 解决这个问题。 PS:我会更新我的问题
  • 仅供参考,您不应使用new XmlTextReader()new XmlTextWriter()。自 .NET 2.0 以来,它们已被弃用。请改用XmlReader.Create()XmlWriter.Create()。这是一个完美的例子,说明为什么不通过互联网学习。您的搜索发现了过时的信息。
  • 感谢您的提示。我会做出改变

标签: c# xml-parsing


【解决方案1】:

IsElementEmpty property 是您想要的吗?您究竟是如何阅读您的文档以致出现这种情况的?

【讨论】:

  • 你好,我已经添加了我用来阅读的循环。我为每个可能的元素创建了一个类,每个类构造函数都有一个 XmlTextReader 对象作为参数。结果是对元素的递归读取。该代码非常健壮,但某些元素缺少的结束标签给我带来了问题。我只需要检测它们
  • 那个属性不是你想要的吗?
  • 是的,这似乎就是我要找的东西!我很惊讶我是如何错过它的。我试图恶魔 .is... 属性找不到它。我多么愚蠢。对不起,谢谢。
猜你喜欢
  • 2011-12-02
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多