有时,某个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/>
。
答案 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}},否则您还必须检查空白节点。