首页 新闻 赞助 找找看

关于XML节点查找,加了属性就不认帐了?

0
悬赏园豆:50 [已解决问题] 解决于 2008-09-07 17:20

首先,检查过100遍了,XML和C#绝对没有语法错误,机器也没有中毒,各种补丁全打了,等等等之类的低级错误可以排除。

 

很郁闷,例如有这样一个XML文件:

<main name="x1">

<url>http://www.xxx.com</url>

<id>1</id>

</main>

 

然后在XmlDocument对象中加载,使用Xpath查找url,这样写:“/main/url”,总是提示出错,说没有找到对象,我奇怪了,搞了几个小时,才发现如果把根节点的 name="x1" 这个属性去掉,就正常了。但是这样做不是办法,因为某些XML的格式固定的,不可能由自己来操纵对方的格式(例如远程获取的XML)。

 

请问这个问题应该如何解决呢?

 

顺便说一句,同样的Xpath,在javascript中加载XMLHTTP对象来处理的时候就没有问题。难道是,NET中的Xpath另有文章?

 

问题补充: ----------------------------------- 感谢TerryLee 的关注,实际上我的目标文件是这个: <?xml version='1.0' encoding='UTF-8'?> <feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='W/&quot;A0MBQHk5fyp7ImA9WxRTE0s.&quot;'> <id>tag:blogger.com,1999:blog-7559165514750516548</id> <updated>2008-09-02T08:30:51.727-07:00</updated> <title>this is title</title> <subtitle type='html'></subtitle> <link rel='alternate' type='text/html' href='http://www.kvspas.com/'/> <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.kvspas.com/feeds/posts/default'/> <link rel='self' type='application/atom+xml' href='http://www.kvspas.com/feeds/posts/default'/> <author> <name>某某的名字</name> <email>noreply@blogger.com</email> </author> <generator version='7.00' uri='http://www.blogger.com'>Blogger</generator> </feed> 截取了一部分无关紧要的了,这是blogspot生成的feed,必须远程加载,我不可能去修改它。 您可以试试查找 "feed/title" 看看。 我的C#代码如下: XmlDocument doc = new XmlDocument(); doc.Load("c:/xmlfile1.xml"); XmlNode t = doc.SelectSingleNode("feed/title"); Console.WriteLine(t.InnerText); 问题就出在feed节点的那些属性上面。
develope-logs的主页 develope-logs | 菜鸟二级 | 园豆:204
提问于:2008-09-03 00:45
< >
分享
最佳答案
0
你举的例子不能反应你的真实情况。所以TerryLee的实验是可以通过的。 XmlDocument doc = new XmlDocument(); doc.Load("c:/xmlfile1.xml"); XmlNamespaceManager _manager = new XmlNamespaceManager(doc.NameTable); _manager.AddNamespace("cnblogs", "http://www.w3.org/2005/Atom"); XmlNode t = doc.SelectSingleNode("//cnblogs:title", _manager); Console.WriteLine(t.InnerText);
Hunts.C | 菜鸟二级 |园豆:266 | 2008-09-03 03:54
其他回答(1)
0
这段代码在我这儿测试就没有问题,呵呵 String text = "<main name=\"x1\">"; text += @"<url>http://www.xxx.com</url> <id>1</id> </main>"; XmlDocument doc = new XmlDocument(); doc.LoadXml(text); XmlNode node = doc.SelectSingleNode("/main/url"); Console.WriteLine(node.Name); 输出结果: [img]http://pic002.cnblogs.com/img/terrylee/200809/2008090300583949.png[/img] 看来只能把你的代码贴出来看看了,又或者我误解了你的意思:)
TerryLee | 园豆:3300 (老鸟四级) | 2008-09-03 00:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册