我有这个XML文件
<?xml version="1.0" encoding="utf-8"?>
<message>
<success/>
<bookings>
<booking>
<rooms>
<room roomCode ="101" uniqueId="abc">
<stays>
<stay usedfrom="9:30" usedto="10:30" quantity="1" Price="62.5" rateCode="1"/>
</stays>
<extras>
<extra from="9:30" to="10:30" unitPrice="5.5" extraCode="coffee" quantity="1" inclusive="0"/>
</extras>
<guests>
<guest firstName="John" lastName="Doe" title="MR" ageRange="0"/>
</guests>
</room>
<room roomCode ="Brd" uniqueId="xyz">
<stays>
<stay usedfrom="13:30" usedto="15:30" quantity="1" unitPrice="60.0000" rateCode="RACK"/>
</stays>
<guests>
<guest firstName="Jean" lastName="Doe" title="MRS" ageRange="0"/>
</guests>
</room>
</rooms>
</booking>
并且我正在尝试运行检查以确保其格式正确(即某些元素存在)。 我一直在使用的代码是
XmlNodeList Successful = doc.GetElementsByTagName("success");
XmlNodeList Bookings = doc.GetElementsByTagName("bookings");
XmlNodeList Booking = doc.GetElementsByTagName("booking");
XmlNodeList Rooms = doc.GetElementsByTagName("rooms");
if ((Successful != null) && (Bookings != null) && (Booking != null) && (Rooms != null))
{
//do something
}
else
{
//do something else
}
这总是有用的想法。
如果我将其中一个值更改为
XmlNodeList Rooms = doc.GetElementsByTagName("NoSuchElement");
(XML中不存在)它仍然“有效”。
有人可以指出我做错了吗(我尝试从“if”语句中删除外部括号,但这并没有改变结果)。
由于
答案 0 :(得分:4)
选择docs:
包含所有匹配节点列表的XmlNodeList。如果没有节点 匹配名称,返回的集合将为空。
该方法不能返回null
,而是返回一个空列表。所以请检查一下:
if(theNodeList.Any()) { ... }
else { /* error */ }
答案 1 :(得分:3)
这是因为oc.GetElementsByTagName("NoSuchElement");
永远不会为空。
根据documentation,如果不存在任何元素,则返回en 空集合,它不为空。
您必须检查结果的Count
。
类似的东西:
if (Successful.Count() != 0 && ...)
或
if (!Successful.Any() && ... )