XPath查询无法在C#中工作

时间:2014-11-19 20:56:38

标签: xpath

我有以下XML。

<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog xmlns="urn:ihe:iti:xds-b:2007">
  <cd country="USA">
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <price>10.90</price>
  </cd>
  <cd country="UK">
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <price>10.0</price>
  </cd>
  <cd country="USA">
    <title>Greatest Hits</title>
    <artist>Dolly Parton</artist>
    <price>9.90</price>
  </cd>
</catalog>

-------------------以及代码---

var document = new XmlDocument();
document.Load(@"C:\Temp\tmp\data1.xml");
var nsmgr = new XmlNamespaceManager(document.NameTable);
var nl = document.SelectNodes("catalog/cd[@country='UK']", nsmgr);

document.SelectNodes不会返回任何内容。当我删除元素目录(xml的第二行)上的名称空间时,它工作正常。所以它与命名空间有关。我如何使其工作?我究竟做错了什么?

感谢 gulumal

1 个答案:

答案 0 :(得分:1)

我相信您需要将文档中的命名空间添加到NamespaceManager

 var nsmgr = new XmlNamespaceManager(document.NameTable);
 // add extra namespace with prefix "s"
 nsmgr.AddNamespace("s", "urn:ihe:iti:xds-b:2007");

然后你查询就像这样(注意使用&#34; s&#34;作为命名空间前缀):

 var nl = document.SelectNodes("s:catalog/s:cd[@country='UK']", nsmgr);