C#Xpath无法按名称获取元素

时间:2019-02-03 09:16:32

标签: c# xml xpath

具有下一个结构已将文档加载到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没有给我任何结果?

1 个答案:

答案 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"]