C# SelectNodes(..)-找不到任何内容。。帮忙?
很抱歉用这么简单的问题来打扰你,但我已经被困在这里一个小时了: 我有一个xml文件,看起来像这样:C# SelectNodes(..)-找不到任何内容。。帮忙?,c#,.net,xml,xmlreader,C#,.net,Xml,Xmlreader,很抱歉用这么简单的问题来打扰你,但我已经被困在这里一个小时了: 我有一个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" /&g
<?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>
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”),但只有“/”似乎不返回null
这个代码以前对我有用,现在不行了。我怀疑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表达式中