0
XML现有元素nullReferenceExceptionUnhandled错误试图解析这个XML我不断地得到在这一点上的100个变化我虽然我更好地做一个职位之前,我开始摔东西(如我的显示器)上解析使用的XDocument
System.NullReferenceException was unhandled
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=
StackTrace:
at Dashboard.Global.geocoder(Object o) in :line 60
at System.Threading.TimerQueueTimer.CallCallbackInContext(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.TimerQueueTimer.CallCallback()
at System.Threading.TimerQueueTimer.Fire()
at System.Threading.TimerQueue.FireNextTimers()
at System.Threading.TimerQueue.AppDomainTimerCallback()
InnerException:
该XML是FCC.gov很简单
<Response xmlns="http://data.fcc.gov/api" status="OK" executionTime="91">
<Block FIPS="181770103002004"/>
<County FIPS="18177" name="Wayne"/>
<State FIPS="18" code="IN" name="Indiana"/>
</Response>
我的代码已经演变颇有几分
var xdoc = XDocument.Load(response.GetResponseStream());
XNamespace ns = xdoc.Root.Attribute("xmlns").ToString();
var results = xdoc.Element(ns + "Response").Element(ns + "Block").Attribute("FIPS"); //null ref
if (xdoc != null)
{
var FIPS_State_Code = results.Value.Substring(0,1); //null ref
var FIPS_County_Code = xdoc.Element("response"); //nullref
var Census_Tract = xdoc.Element("response").Element("Block").Attribute("FIPS").Value; //null ref
var Census_Block_Group = xdoc.Element("response").Element("Block"); //null ref
通过tomolak最终产品已回答(如果你确实拉普查块):
var xdoc = XDocument.Load(response.GetResponseStream());
XNamespace fcc = "http://data.fcc.gov/api";
var results = xdoc.Element(fcc + "Response").Element(fcc + "Block").Attribute("FIPS").Value.ToString();
if (xdoc != null)
{
var FIPS_State_Code = results.Substring(0,2);
var FIPS_County_Code = results.Substring(2, 3);
var Census_Tract = results.Substring(5, 6);
var Census_Block_Group = results.Substring(11, 4);
}
注意,一个良好的避免LINQ to XML中的空引用异常的方法是对'string'做一个明确的转换 - 即'var FIPS_Block_Code =(string)block.Attribute(“FIPS”); - 如果找不到属性,它将返回空值。在这种情况下不太可能出现这种情况,但这是一种很好的最佳做法,尤其是当您无法一直指望存在的元素/属性时。 – Tim
这完美的作品!我知道它必须是命名空间,但我不能正确地得到它 – Vinez
谢谢蒂姆我会记住这一点 – Vinez