XML文档的SelectSingleNode返回null

XML文档的SelectSingleNode返回null

本文介绍了XML文档的SelectSingleNode返回null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图读取流读取XML和我也越来越响应XML。但是当我尝试读取它的节点它总是返回null。

  VAR请求=(HttpWebRequest的)WebRequest.Create(地址) ; 
变种响应=(HttpWebResponse)request.GetResponse();
VAR流= response.GetResponseStream();

如果(流!= NULL)
{
变种的XMLReader = XmlTextReader的新(流);
变种的XmlDocument =新的XmlDocument();
XMLDocument.load方法(XMLReader的);
VAR节点= xmlDocument.SelectSingleNode(RateQuote);
}



XML文档



 < RateQuoteResponse的xmlns =http://ratequote.usfnet.usfc.com/v2/x1> 
<状态>
<代码和GT; 0℃; / CODE>
<视图>&SECURED LT; /视图>
<版本> ...< / VERSION>
< /状态>
< RateQuote>
<由来及GT;
<名称>&KNOXVILLE LT; /名称>
<载体> USF荷兰公司与LT; /载体GT;
<地址> 5409ñNATIONAL DR< /地址>
< CITY>&KNOXVILLE LT; / CITY>
<州及GT; TN< / STATE>
<邮编及GT; 37914< / ZIP>
<电话和GT; 8664655263< /手机>
< PHONE_TOLLFREE> 8006545963< / PHONE_TOLLFREE>
<传真> 8656379999< / FAX>
< / ORIGIN>
<目的地>
<名称>&KNOXVILLE LT; /名称>
<载体> USF荷兰公司与LT; /载体GT;
<地址> 5409ñNATIONAL DR< /地址>
< CITY>&KNOXVILLE LT; / CITY>
<州及GT; TN< / STATE>
<邮编及GT; 37914< / ZIP>
<电话和GT; 8664655263< /手机>
< PHONE_TOLLFREE> 8006545963< / PHONE_TOLLFREE>
<传真> 8656379999< / FAX>
< /目的>
< ORIGIN_ZIP> 37914< / ORIGIN_ZIP>
< DESTINATION_ZIP> 37909< / DESTINATION_ZIP>
<&TOTAL_COST GT;&99.24 LT; / TOTAL_COST>
< SERVICEDAYS> 1 LT; / SERVICEDAYS>
< INDUSTRYDAYS> 1.6 LT; / INDUSTRYDAYS>
< CLASSWEIGHT>
< CLASS> 55℃/ CLASS>
将; ASCLASS> 50℃/ ASCLASS>
<重> 100℃/重量>
<费用与GT; 0.0< /费用与GT;
< / CLASSWEIGHT>
< / RateQuote>
< / RateQuoteResponse>


解决方案

中的XML文档使用默认名称空间的。您需要修改的SelectSingleNode 称使用此命名空间。



您需要设置一个namspace经理,然后提供它的SelectSingleNode

  VAR nsmgr =新的XmlNamespaceManager(doc.NameTable ); 
nsmgr.AddNamespace(速度,http://ratequote.usfnet.usfc.com/v2/x1);
VAR节点= xmlDocument.SelectSingleNode(//率:RateQuote,nsmgr);

修改
中的 RateQuoteResponse 元素有一个默认的命名空间的xmlns =...。这意味着所有的元素使用此命名空间还,除非明确覆盖。


I am trying to read XML from stream reader and am also getting response XML. But when i try to read its nodes it is always returning null.

var request = (HttpWebRequest) WebRequest.Create(address);
var response = (HttpWebResponse) request.GetResponse();
var stream = response.GetResponseStream();

if(stream != null)
{
   var xmlReader = new XmlTextReader(stream);
   var xmlDocument = new XmlDocument();
   xmlDocument.Load(xmlReader);
   var node = xmlDocument.SelectSingleNode("RateQuote");
}

XML Document

<RateQuoteResponse xmlns="http://ratequote.usfnet.usfc.com/v2/x1">
  <STATUS>
   <CODE>0</CODE>
   <VIEW>SECURED</VIEW>
   <VERSION>...</VERSION>
  </STATUS>
 <RateQuote>
   <ORIGIN>
     <NAME>KNOXVILLE</NAME>
     <CARRIER>USF Holland, Inc</CARRIER>
     <ADDRESS>5409 N NATIONAL DR</ADDRESS>
     <CITY>KNOXVILLE</CITY>
     <STATE>TN</STATE>
     <ZIP>37914</ZIP>
     <PHONE>8664655263</PHONE>
     <PHONE_TOLLFREE>8006545963</PHONE_TOLLFREE>
     <FAX>8656379999</FAX>
  </ORIGIN>
  <DESTINATION>
     <NAME>KNOXVILLE</NAME>
     <CARRIER>USF Holland, Inc</CARRIER>
     <ADDRESS>5409 N NATIONAL DR</ADDRESS>
     <CITY>KNOXVILLE</CITY>
     <STATE>TN</STATE>
     <ZIP>37914</ZIP>
     <PHONE>8664655263</PHONE>
     <PHONE_TOLLFREE>8006545963</PHONE_TOLLFREE>
     <FAX>8656379999</FAX>
  </DESTINATION>
     <ORIGIN_ZIP>37914</ORIGIN_ZIP>
     <DESTINATION_ZIP>37909</DESTINATION_ZIP>
     <TOTAL_COST>99.24</TOTAL_COST>
     <SERVICEDAYS>1</SERVICEDAYS>
     <INDUSTRYDAYS>1.6</INDUSTRYDAYS>
     <CLASSWEIGHT>
        <CLASS>55</CLASS>
        <ASCLASS>50</ASCLASS>
        <WEIGHT>100</WEIGHT>
        <CHARGES>0.0</CHARGES>
     </CLASSWEIGHT>
</RateQuote>
</RateQuoteResponse>
解决方案

The XML document uses the default namespace "http://ratequote.usfnet.usfc.com/v2/x1". You need to change the SelectSingleNode call to use this namespace.

You need to setup a namspace manager and then supply it to SelectSingleNode.

var nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("rate", "http://ratequote.usfnet.usfc.com/v2/x1");
var node = xmlDocument.SelectSingleNode("//rate:RateQuote", nsmgr);

EDITThe RateQuoteResponse element has a default namespace xmlns="...". This means that all elements use this namespace also, unless specifically overridden.

这篇关于XML文档的SelectSingleNode返回null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 23:48