2013-07-11 46 views
14

我嘗試下面的代碼以獲取特定節點的值,但在加載此拋出異常的XML:如何獲得在字符串中的XML節點值

例外:

根級別的數據無效。行1,位置1

XML

<?xml version="1.0"?> 
<Data xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Date>11-07-2013</Date> 
    <Start_Time>PM 01:37:11</Start_Time> 
    <End_Time>PM 01:37:14</End_Time> 
    <Total_Time>00:00:03</Total_Time> 
    <Interval_Time/> 
    <Worked_Time>00:00:03</Worked_Time> 
    <Short_Fall>08:29:57</Short_Fall> 
    <Gain_Time>00:00:00</Gain_Time> 
</Data> 

C#:

XmlDocument xml = new XmlDocument(); 
filePath = @"D:\Work_Time_Calculator\10-07-2013.xml"; 
xml.LoadXml(filePath); // Exception occurs here 
XmlNode node = xml.SelectSingleNode("/Data[@*]/Short_Fall"); 
string id = node["Short_Fall"].InnerText; 

改進型Code

C#:

XmlDocument xml = new XmlDocument(); 
filePath = @"D:\Work_Time_Calculator\10-07-2013.xml"; 
xml.Load(filePath); 
XmlNode node = xml.SelectSingleNode("/Data[@*]/Short_Fall"); 
string id = node["Short_Fall"].InnerText; // Exception occurs here ("Object reference not set to an instance of an object.") 
+0

[根目錄下的數據無效]的可能重複(http://stackoverflow.com/questions/5748668/data-at-the-root-level-is-invalid) –

+0

爲什麼不使用LINQ到XML?這比舊的'XmlDocument'類更容易和更友好。 – MarcinJuraszek

回答

20

在你的代碼的問題是xml.LoadXml(filePath);

loadXML的方法取參數爲XML數據 xml文件路徑

試試這個代碼

string xmlFile = File.ReadAllText(@"D:\Work_Time_Calculator\10-07-2013.xml"); 
XmlDocument xmldoc = new XmlDocument(); 
xmldoc.LoadXml(xmlFile); 
XmlNodeList nodeList = xmldoc.GetElementsByTagName("Short_Fall"); 
string Short_Fall=string.Empty; 
foreach (XmlNode node in nodeList) 
{ 
    Short_Fall = node.InnerText; 
} 

編輯

看到你的問題的最後編輯我找到了解決辦法,

只是

XmlNode node = xml.SelectSingleNode("/Data[@*]/Short_Fall"); 
string id = node["Short_Fall"].InnerText; // Exception occurs here ("Object reference not set to an instance of an object.") 

string id = xml.SelectSingleNode("Data/Short_Fall").InnerText; 

應該解決更換下方二號線您的問題,或者您可以使用我前面提供的解決方案。

7

您應該使用.Load而不是.LoadXML

MSDN Link

「loadXML方法是直接加載XML字符串。你想使用Load方法,而不是「

REF:Link

+0

我用Load方法現在不引發異常,但「對象引用未設置爲對象的實例」。在行字符串id = node [「Short_Fall」]處被拋出。的innerText; – Vignesh

+0

我認爲這是因爲你已經在Short_Fall 像你在前一行 xml.SelectSingleNode(「/ Data [@ *]/Short_Fall」); –

+0

那麼如何得到那個特定的節點值 – Vignesh

相關問題