2017-01-11 60 views
0

我正在運行這行代碼,該代碼行可以完美執行大約800條記錄。它擊中記錄801,和我拋出Handle Null XML元素

型「System.NullReferenceException」發生在XMLPost.exe
未處理的異常
其他信息:對象引用不設置到對象的實例。

這是麻煩的代碼行,我認爲在?.Value中加入的代碼會佔用空元素。

string sr12 = xml.Element("Parent").Element("Child1").Element("Child2").Element("Child3").Element("Child4").Element("Child5").Element("sr12")?.Value; 
Console.WriteLine(sr12); 

我應該改變我的變量sr12,這樣它不會破壞我的代碼可以繼續按預期執行?

編輯

XML結構

<parent> 
<one> 
    <two> 
     <three> 
      <sr12></sr12> 
     </three> 
    </two> 
</one> 
    <ten> 
    <eleven> 
     <twelve> 
      <thirteen> 
       <sr12></sr12> 
      </thirteen> 
     </twelve> 
    </eleven> 
    </ten> 
</parent> 

我也試過這個語法

var result = (string) xml.Elements("Parent") 
.Elements("ten") 
.Elements("eleven") 
.Elements("twelve") 
.Elements("thirteen") 
.Elements("homeaddress") 
.SingleOrDefault(); 

其產生

類型的未處理的異常錯誤「系統.InvalidO perationException」發生在System.Core.dll
其他信息:序列包含多個元素

+0

可能的複製HTTP:/ /stackoverflow.com/questions/7186796/how-to-check-particular-attributes-exist-or-not-in-xml –

+0

如果任何其他元素(「xx」)元素爲空,該怎麼辦?你只需檢查元素(「sr12」)是否爲空。 – Nebr

+0

請勿使用value:string sr12 =(string)xml.Element(「Parent」)。Element(「Child1」)。Element(「Child2」)。Element(「Child3」)。Element(「Child4」)。元素( 「Child5」)元件( 「SR12」); – jdweng

回答

0

如果在查詢這些單元的任意丟失,你會得到這個例外。 Element查詢要麼返回XElement,要麼返回null

您應該使用Elements查詢。這將返回全部與該名稱匹配的元素,並且可以以相同方式鏈接。使用這種方法的結果是,如果有任何元素丟失,您只需獲得一個空序列。

如果您在最後調用SingleOrDefault,它將返回查詢返回的單個元素或null。然後可以使用內置的顯式轉換爲字符串。

var result = (string) xml.Elements("Parent") 
    .Elements("Child1") 
    .Elements("Child2") 
    .Elements("Child3") 
    .Elements("Child4") 
    .Elements("Child5") 
    .Elements("sr12") 
    .SingleOrDefault(); 

或者,如果絕對路徑並不重要(它可能是sr12只出現在層次結構中的一個點),那麼你可以使用Descendants

var result = (string) xml.Descendants("sr12").SingleOrDefault(); 
+0

我得到這個錯誤 - 'XElement'不包含'SingleOr默認',沒有擴展方法'SingleOrDefault'接受類型'XElement'的第一個參數可以被發現 –

+0

@ToastedBreadLeavesYouDead聽起來像你仍然在調用'Element'而不是'Elements'。注意最後的** s **。 –

+0

好抓。我更改爲元素,現在得到一個錯誤在System.Core.dll 中發生類型'System.InvalidOperationException'未處理的異常其他信息:序列包含多個元素 –