2013-07-11 45 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

相关问题