如何处理XML Element没有值时

时间:2009-03-19 13:06:12

标签: c# xml

有时,某个XMLElement有一个值:

<CAR>value</CAR>

有时虽然它不在回溯XML中:

<CAR/>

使用XmlReader时,我不确定如何处理这种情况。例如,我有读取每个元素的代码。但是,如果汽车有时没有价值回来怎么办?然后我的DateTime.Parse爆炸了,所以我不太确定基本上处理这些情况并用XmlReader跳过它:

reader.ReadStartElement("CAR");
// error here since car doesn't have a value this time
_tDate = DateTime.Parse(reader.ReadContentAsString());

修改

if(!reader.IsStartElement())

这也不起作用。在看到它不是一个start元素之后,我得到一个错误,并且不确定如何处理基本上在if语句之后跳过它

if(!reader.IsStartElement())
                    {
                        reader.ReadStartElement("CAR");
                        _tDate = DateTime.Parse(reader.ReadContentAsString());

                    }
                    reader. ReadEndElement(); <-- ERROR HERE not sure how to move on

编辑2:

如果值为<CAR/>

,我怎样才能成真
           reader.ReadStartElement("In");
            _optedInDate = DateTime.Parse(reader.ReadContentAsString());
            _userIsOut = false;
            reader.ReadEndElement();

            if(reader.IsStartElement("CAR"))
            {
                reader.ReadStartElement("CAR");
                _optedOutDate = DateTime.Parse(reader.ReadContentAsString());
                _userIsOptedOut = true;

            }

            reader.ReadStartElement("COLUMNS");
            reader.ReadStartElement("COLUMN");

这显然不是一个开始元素,但我实现了......

编辑3:

尝试了这个:

                if((reader.NodeType == XmlNodeType.Element) & (!reader.IsEmptyElement))
                {
                    reader.ReadStartElement("CAR");
                    _optedOutDate = DateTime.Parse(reader.ReadContentAsString());
                    _userIsOptedOut = true;

                }

                reader.ReadStartElement("COLUMNS"); Error Here: Element 'COLUMNS' was not found. Line 12, position 2

nodetype是“whitespace”。我无法弄清楚该如何跳过那该死的<CAR/>

3 个答案:

答案 0 :(得分:1)

首先阅读内容,然后根据是否有内容致电DateTime.Parse。如果您有时想要跳过“坏”内容,您也应该查看DateTime.TryParse。至于你应该在更宏大的方案中做些什么,如果你得到一个空元素,这完全取决于你的应用程序 - 我们无法真正告诉你。

答案 1 :(得分:1)

如果您使用的阅读器是XMLReader,请使用:

XmlReader reader;
reader.IsEmptyElement // to determine if you should try and parse the value.

请注意,您可能需要单独使用以下内容来确保您阅读内容......

Reader.Read();
Reader.MoveToContent();

答案 2 :(得分:0)

我也想了一会儿。你应该这样做:

if (!reader.IsEmptyElement)
{
    reader.ReadStartElement("CAR");

    // Read the content
    _tDate = DateTime.Parse(reader.ReadContentAsString());

    reader.ReadEndElement();
}
else
    reader.Skip();

这是XmlReaderSettings的{​​{1}},否则您还必须检查空白节点。