具有下一个结构已将文档加载到XmlDocument
<?xml version="1.0" encoding="UTF-8"?>
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">
<stylesheet type="text/css"></stylesheet>
<description>...</description>
<body>...</body>
<binary id="19317.jpg" content-type="image/jpeg">...</binary>
</FictionBook>
下一个方法返回空值(如果我使用SelectNodes,则返回空集合):
doc.SelectSingleNode("body");
doc.SelectSingleNode("//body");
doc.LastChild.SelectSingleNode("body");
doc.LastChild.SelectSingleNode("//body");
但是这个可以正常工作
doc.LastChild["body"];
为什么XPath没有给我任何结果?
答案 0 :(得分:0)
doc.SelectSingleNode("//body");
不起作用,因为body
是在特定的命名空间“ http://www.gribuser.ru/xml/fictionbook/2.0”中声明的,因此要查询它,您可以这样编码:
var mgr = new XmlNamespaceManager(new NameTable());
mgr.AddNamespace("whatever", "http://www.gribuser.ru/xml/fictionbook/2.0");
var node = doc.SelectSingleNode("//whatever:body", mgr);
doc.LastChild["body"]
;之所以有效,是因为该实现支持该实现,但是您可以像这样使用它来避免歧义:
doc.LastChild["body", "http://www.gribuser.ru/xml/fictionbook/2.0"]