如何获得字符串的XML节点值 [英] How to get the xml node value in string

查看:355
本文介绍了如何获得字符串的XML节点值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试过下面的代码来获取特定节点的值,但在加载此抛出异常的XML:



例外:




数据在根级别无效。 1号线,位置1。




XML



 <?XML版本=1.0>?; 
<数据的xmlns:XSD =htt​​p://www.w3.org/2001/XMLSchema中的xmlns:XSI =htt​​p://www.w3.org/2001/XMLSchema-instance>
<日期和GT; 2013年11月7日< /日期和GT;
<&START_TIME GT;下午01:37:11< / START_TIME>
<&END_TIME GT;下午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>
< /数据>



C#:



  XmlDocument的XML =新的XmlDocument(); 
文件路径= @D:\Work_Time_Calculator\10-07-2013.xml
xml.LoadXml(文件路径); //异常发生在这里
XmlNode的节点= xml.SelectSingleNode(/数据[@ *] / Short_Fall);
字符串ID =节点[Short_Fall]的InnerText。



修改代码



C#:

  XmlDocument的XML =新的XmlDocument(); 
文件路径= @D:\Work_Time_Calculator\10-07-2013.xml
与XML.load(文件路径);
XmlNode的节点= xml.SelectSingleNode(/数据[@ *] / Short_Fall);
字符串ID =节点[Short_Fall]的InnerText。 //异常发生在这里(对象引用不设置到对象的实例。)


解决方案

在你的代码的问题是xml.LoadXml(文件路径);




loadXML的方法取参数为XML数据不是XML文件路径




试试这个代码

 字符串XMLFILE = File.ReadAllText(@D:\Work_Time_Calculator\10-07-2013.xml); 
的XmlDocument xmlDoc中=新的XmlDocument();
xmldoc.LoadXml(XMLFILE);
XmlNodeList中节点列表= xmldoc.GetElementsByTagName(Short_Fall);
串Short_Fall =的String.Empty;
的foreach(在节点列表XmlNode的节点)
{
Short_Fall = node.InnerText;
}

修改



看到你的问题的最后编辑我找到了解决办法,



只需更换低于2行

  XmlNode的节点= xml.SelectSingleNode(/数据[@ *] / Short_Fall); 
字符串ID =节点[Short_Fall]的InnerText。 //异常发生在这里(对象引用不设置到对象的实例。)



 字符串ID = xml.SelectSingleNode(数据/ Short_Fall)的InnerText。 



它应该解决您的问题,或者你可以使用我先前提供的解决方案。


I tried the below code to get the value of a particular node, but while loading the xml this exception is thrown:

Exception:

Data at the root level is invalid. Line 1, position 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;

Modified 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.")

解决方案

The problem in your code is xml.LoadXml(filePath);

LoadXml method take parameter as xml data not the xml file path

Try this code

   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;
                }

Edit

Seeing the last edit of your question i found the solution,

just replace the below 2 line

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.")

with

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

it should solve your problem or you can use the solution i provided earlier.

这篇关于如何获得字符串的XML节点值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆