抱歉打扰你这么简单的问题,但是我被困在这里一个小时:
<?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表达式中.
原文地址:https://www.jb51.cc/csharp/243742.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。