C# 读取XML节点时出现问题

C# 读取XML节点时出现问题,c#,xml,C#,Xml,我在这个网站上尝试了很多不同的解决方案,但似乎没有一个适合我。 我从一个网站得到一个xml文件,它以字符串的形式返回给我 使用下面的代码,我需要读取xml文件“entry”部分中的节点。 但它总是显示为“0”,表示找不到节点。我认为唯一剩下的是XML文件不正确 任何帮助都会很好 ------------------代码如下----------------: ------------------------------下面是XML文件------------------ http://www.w

我在这个网站上尝试了很多不同的解决方案,但似乎没有一个适合我。 我从一个网站得到一个xml文件,它以字符串的形式返回给我

使用下面的代码,我需要读取xml文件“entry”部分中的节点。 但它总是显示为“0”,表示找不到节点。我认为唯一剩下的是XML文件不正确

任何帮助都会很好

------------------代码如下----------------:

------------------------------下面是XML文件------------------


http://www.weather.gov/alerts-beta/wwaatmget.php?x=MIC159
NWS CAP服务器
2010-08-22T19:06:00-04:00
w-nws。webmaster@noaa.gov
国家气象局发布的密歇根州范布伦(MIC159)最新观测、警告和咨询
http://www.weather.gov/alerts-beta/wwacapget.php?x=MI20100822190600IWXRipCurrentStatementIWX20100823060000MI
2010-08-22T15:06:00-04:00
2010-08-22T15:06:00-04:00
w-nws。webmaster@noaa.gov
西北航空公司NorthernIndiana于美国东部时间8月22日下午3:06发布的Rip当前声明于美国东部时间8月23日凌晨2:00到期http://www.crh.noaa.gov/iwx/
…RIP当前风险在美国东部夏令时凌晨2点/加拿大夏令时凌晨1点/周一之前有效。。。撕裂电流的高风险。。。沿着海岸线的巨浪会增加周一清晨出现急流的风险……造成危险的游泳条件。
2010-08-22T15:06:00-04:00
2010-08-23T02:00:00-04:00
实际的
警觉的
遇见
贝里恩;货运财务结算系统;拉波特;圣约瑟;范布伦
图6
018091 018141 026021 026027 026159
VTEC
/O.CON.KIWX.RP.S.0017.000000T0000Z-100823T0600Z/
:"

使用XmlNamespaceManager将“”名称空间添加到XPath。

这是因为您的XML根节点有一个名称空间。以下操作应该有效:

//load the object with the xml file from the web...
doc.LoadXml(WeatherXML);
XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable);
nsMgr.AddNamespace("m", "http://www.w3.org/2005/Atom");

//go to the main node.. 
XmlNodeList nodes = doc.SelectNodes("m:feed", nsMgr);
Console.WriteLine(nodes.Count);    // outputs 1

除了使用常规的
System.Xml
类之外,还可以使用命名空间中的类。我个人觉得这些类更容易使用

var doc = XDocument.Parse(WeatherXml);
var entryNodes = doc.Descendants(
        XName.Get("entry", "http://www.w3.org/2005/Atom"));

这将为您提供文档中输入节点的集合。

好的,我现在看到了,是的,我得到了一个输出,现在我需要深入到标记:我尝试了XmlNodeList nodest nodes=doc.SelectNodes(“m:feed/entry”,nsMgr);但我得到的计数为零,我不希望您为我做所有的工作:-)但是关于如何深入到我需要的标记的任何指导都将非常好,谢谢大家的帮助。我怀疑您将需要
“m:feed/m:entry“
。至于条目中的节点,请注意它们具有不同的XML名称空间,您必须将其单独添加到
nsMgr
。就是这样!非常感谢你!我真的学到了很多很棒的东西!再次感谢!
//load the object with the xml file from the web...
doc.LoadXml(WeatherXML);
XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable);
nsMgr.AddNamespace("m", "http://www.w3.org/2005/Atom");

//go to the main node.. 
XmlNodeList nodes = doc.SelectNodes("m:feed", nsMgr);
Console.WriteLine(nodes.Count);    // outputs 1
var doc = XDocument.Parse(WeatherXml);
var entryNodes = doc.Descendants(
        XName.Get("entry", "http://www.w3.org/2005/Atom"));