2013-06-21 228 views
1

讓我們看看下面的XML作爲獲取XML節點值c#

<?xml version="1.0" encoding="UTF-8" ?> 
    <response success="true"> 
     <struct>value</struct> 
    </response> 

在分析我收到以下錯誤作爲

Root element is missing. 

,我所用的是代碼

foreach (XElement carselement in xdoc.Descendants("response")) 
       { 
        String value= carselement.Element("struct").Value; 

       } 

等待您的解決方案

+3

如何'xdoc'加載,這是什麼*真的*包含?我會想象它不代表那個XML。 – user2246674

+0

@ user2246674雅是多數民衆贊成在我面臨的問題,我可以做一些其他的方式 – GowthamanSS

+1

@GowthamanSS你的代碼工作沒有問題。 –

回答

1

未如預期的XML輸入(它是 「空的」)和期間XDocument.Load(或XDocument.Parse等)發生異常。

最終xdoc確實不包含所期望的 - 並且「嫌疑」行甚至不會運行;再次,此異常是在解析的XML爲時引起的,而不是枚舉/導航時引起的。這種情況應該很容易用attached debugger或堆棧跟蹤識別。

這是一些可以在LINQPad中作爲C#語句運行的最小代碼。我已經修改了它,恰好可以很好地顯示轉儲。請注意,它按預期運行

var xmlStr = @"<?xml version=""1.0"" encoding=""UTF-8"" ?> 
    <response success=""true""> 
     <struct>value</struct> 
    </response>"; 
var xdoc = XDocument.Parse(xmlStr); 
xdoc.Descendants("response") 
    .Select(e => e.Element("struct").Value) 
    .Dump(); 

下面是例外可以造成的(和它無關Descendants或其他枚舉/導航):

var xmlStr = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>"; 
var xdoc = XDocument.Parse(xmlStr); 
// --> XmlException: Root element is missing 
+0

很好地完成!這將非常容易進行調試,並不容易猜測並找出「鉛筆和紙張」 –

0

也許你的XML是在簡化的,看起來像這樣:

<!-- example --> 
<?xml version="1.0" encoding="UTF-8" ?> 
<response success="true"> 
    <struct>value1</struct> 
</response> 
<response success="true"> 
    <struct>value2</struct> 
</response> 
<response success="false"> 
    <struct>value3</struct> 
</response> 

在這種情況下,你缺少一個<responses></responses>其中response數組元素的周圍包裹。

順便說一句,如果你的XML文件真的是你在這裏引用的,那麼你的代碼也應該工作。你是否也試圖操縱XML?

XDocument xdoc = XDocument.Load(filePath); 
if (xdoc == null) return; 

XElement response = xdoc.Descendants("response").FirstOrDefault(); 
XElement structElement = response.Descendants("struct").FirstOrDefault(); 
+2

請注意,多個根元素會導致「XmlException:有多個根元素。」 – user2246674