c# – XmlElement.SelectNodes(..) – 什么也找不到..帮忙?

c# – XmlElement.SelectNodes(..) – 什么也找不到..帮忙?,第1张

概述抱歉打扰你这么简单的问题,但是我被困在这里一个小时: 我有一个看起来像这样的xml文件: <?xml version="1.0" encoding="utf-8"?><aaa xmlns="http://blabla.com/xmlschema/v1"> <bbb> <ccc>Foo</ccc> </bbb> <ddd x="y" /> <ddd x="xx" /> 抱歉打扰你这么简单的问题,但是我被困在这里一个小时:

我有一个看起来像这样的xml文件:

<?xml version="1.0" enCoding="utf-8"?><aaa xmlns="http://blabla.com/xmlschema/v1">  <bbb>    <ccc>Foo</ccc>  </bbb>  <ddd x="y" />  <ddd x="xx" />  <ddd x="z" /></aaa>

我试图像这样访问元素’ddd’:

var doc = new Xmldocument();doc.Load("example.xml");foreach (XmlNode dddNode in doc.documentElement.SelectNodes("//ddd")){   // do something   Console.Writeline(dddNode.Attributes["x"].Value);}

在运行时,跳过foreach循环,因为我没有从.SelectNodes方法返回任何节点.我在循环之前打破并查看了InnerXML,看起来很好,我还尝试了各种各样的XPath(比如“// bbb”或“/ aaa / ddd”),但只有“/”似乎没有返回空值.

这个确切的代码之前适用于我,现在它没有.我怀疑aaa标签中的命名空间声明,但我无法弄清楚为什么这会导致问题.或者……你能看到我可能遗失的任何东西吗?

解决方法 这是xml命名空间.没有ddd.但是,有x:ddd,其中x是http://blabla.com/xmlschema/v1的别名.您需要使用命名空间进行测试 – 例如:
var nsmgr = new XmlnamespaceManager(doc.nametable);nsmgr.Addnamespace("x","http://blabla.com/xmlschema/v1");var nodes = doc.documentElement.SelectNodes("//x:ddd",nsmgr);// nodes has 3 nodes

注意上面的x是任意的;除了方便之外,x中没有意义.

这(相当不方便)意味着将命名空间(或别名,如上所述)添加到所有xpath表达式中.

总结

以上是内存溢出为你收集整理的c# – XmlElement.SelectNodes(..) – 什么也找不到..帮忙?全部内容,希望文章能够帮你解决c# – XmlElement.SelectNodes(..) – 什么也找不到..帮忙?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1249657.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存