C#XPath帮助 - 表达式不起作用

Mik*_*ebb 6 c# xml xpath

这是一个示例XML文档,它匹配我从以下信息获取的信息:

<?xml version="1.0" standalone="yes"?>
<Products xmlns="http://tempuri.org/Products.xsd">
  <Movies>
    <Title>Title1</Title>
    <Language>English</Language>
  </Movies>
  <Movies>
    <Title>Title2</Title>
    <Language>English</Language>
  </Movies>
  <Movies>
    <Title>Title3</Title>
    <Language>French</Language>
  </Movies>
  <Books>
    <Title>BTitle1</Title>
    <Genre>Suspense</Genre>
  </Books>
  <Books>
    <Title>BTitle2</Title>
    <Genre>Suspense</Genre>
  </Books>
  <Books>
    <Title>BTitle3</Title>
    <Genre>SciFi</Genre>
  </Books>
  <Books>
    <Title>BTitle4</Title>
    <Genre>SciFi</Genre>
  </Books>
</Products>
Run Code Online (Sandbox Code Playgroud)

这是我的代码,以获得所有具有悬念类型的书籍:

//Get state list using XPath
XPathDocument xDoc = new XPathDocument(xmlPath); //Path to my file
XPathNavigator xNav = xDoc.CreateNavigator();
string booksQuery = "Books[Genre = \"Suspense\"]";
XPathNodeIterator xIter = xNav.Select(booksQuery);

while (xIter.MoveNext())
{
    //do stuff with xIter.Current
}
Run Code Online (Sandbox Code Playgroud)

我尝试了好几种查询包括Products/Books[Genre = \"Suspense\"],Products/Books,./Books,和Books.我的xIter总是零项.

我是XPath的新手,所以我确定这是一个非常简单的错误,但也许不是.我知道我可以使用这个XML文件中的表[Movies]和[Books]来获取DataSet,myDataSet.ReadXml(myXmlPathString);因此XML文件没有损坏.如果这有助于任何.

所以,我的问题......我做错了什么?

the*_*ent 10

XPathDocument xDoc = new XPathDocument(xmlPath); //Path to my file
XPathNavigator xNav = xDoc.CreateNavigator();
XmlNamespaceManager mngr = new XmlNamespaceManager(xNav.NameTable);
mngr.AddNamespace("p", "http://tempuri.org/Products.xsd");
string booksQuery = "//p:Books[p:Genre = \"Suspense\"]";
XPathNodeIterator xIter = xNav.Select(booksQuery,mngr);
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 6

您正在寻找名为Books的元素,该元素不在命名空间中.该Products元素正在为该元素及其所有后代设置默认命名空间.您需要在XPath中使用命名空间...或使用不同的方法进行查询,例如LINQ to XML.(我个人认为LINQ到XML 太多容易对付比XPath的-尤其是当你需要得到有关命名空间).