这是我的xml
<?xml version="1.0" encoding="utf-8" ?>
<SMS>
<DeliveryDate>6/27/2015 3:00:00 PM</DeliveryDate>
<Status>DELIVRD</Status>
<Error />
</SMS>
我想知道错误节点是否包含文本
我试过这个:
XmlDocument doc = new XmlDocument();
doc.LoadXml(responseMessage);
string errorTagBody = doc.SelectSingleNode("ERROR").InnerText;
if (string.IsNullOrWhiteSpace(errorTagBody))
但我得到了这个例外:
An unhandled exception of type 'System.NullReferenceException' occurred in TestStatus.exe
Additional information: Object reference not set to an instance of an object.
在这一行:
string errorTagBody = doc.SelectSingleNode("ERROR").InnerText;
有时候,xml可能是这样的:
<?xml version="1.0" encoding="utf-8" ?>
<SMS>
<DeliveryDate>6/27/2015 3:00:00 PM</DeliveryDate>
<Error>Not formatted mobile number </ERROR>
</SMS>
答案 0 :(得分:1)
这里的问题不在于它是一个自我关闭的标签。问题出在您选择节点上。
这说的是在文档的根部给我一个名为ERROR
的元素。没有一个,所以它返回null,你在null上调用.InnerText
,你得到一个空引用异常。
string errorTagBody = doc.SelectSingleNode("ERROR").InnerText;
而不是这样,你可以这样做,这意味着从文档中的任何位置获取Error
元素。
string errorTagBody = doc.SelectSingleNode("//Error").InnerText;
或者这个,意思是在路径SMS中输入错误元素,然后输入错误。
string errorTagBody = doc.SelectSingleNode("SMS/Error").InnerText;
也;案例与XML有关。您无法使用Error
关闭ERROR
,它无效。
答案 1 :(得分:1)
尝试选择它。
XmlDocument doc = new XmlDocument();
doc.LoadXml(responseMessage);
var node = doc.DocumentElement.SelectSingleNode("//Error");
if (null != node && string.IsNullOrEmpty( node.InnerText ))
{
}
答案 2 :(得分:0)
您应该使用带有XPath语法的SelectSingleNode。
doc.SelectSingleNode("//Error").InnerText
答案 3 :(得分:0)
第一个XML是CASE SENSITIVE所以如果你使用&#34;错误&#34;标记,搜索&#34;错误&#34;而不是&#34; ERROR&#34;
其次,SelectSingleNode使用XPath,这是一种引用xml节点的方法(你可以通过在google上搜索来找到更多关于XPath的信息)。你的情况下正确的XPath是&#34; //错误&#34;或&#34;短信/错误&#34; (每个人都有不同的工作方式,再次在google上搜索XPath以了解你想要使用哪个)。
运行此代码以查看发生了什么。
XmlDocument doc = new XmlDocument();
doc.LoadXml("[YUOR XML PATH]");
XmlNode node1 = doc.SelectSingleNode("ERROR");
XmlNode node2 = doc.SelectSingleNode("Error");
XmlNode node3 = doc.SelectSingleNode("//ERROR");
XmlNode node4 = doc.SelectSingleNode("//Error");
XmlNode node5 = doc.SelectSingleNode("SMS/ERROR");
XmlNode node6 = doc.SelectSingleNode("SMS/Error");
if (node1 == null)
{ Console.WriteLine("Node 1 is null"); }
if (node2 == null)
{ Console.WriteLine("Node 2 is null"); }
if (node3 == null)
{ Console.WriteLine("Node 3 is null"); }
if (node4 == null)
{ Console.WriteLine("Node 4 is null"); }
if (node5 == null)
{ Console.WriteLine("Node 5 is null"); }
if (node6 == null)
{ Console.WriteLine("Node 6 is null"); }