C# 使用C查询Xpath中的元素#

C# 使用C查询Xpath中的元素#,c#,.net,xml,xpath,C#,.net,Xml,Xpath,我在一些文档的帮助下学习Xpath,并被一个特殊的查询所困扰。在下面的XML中,我试图为价格>10的书籍打印的,我使用了下面的Xpath查询来实现这一点 strExpression = "/bookstore/book/name/value[../price>10.00]"; NodeIter = nav.Select(strExpression); Console.WriteLine("Names of expensive boo

我在一些文档的帮助下学习Xpath,并被一个特殊的查询所困扰。在下面的XML中,我试图为价格>10的书籍打印
,我使用了下面的Xpath查询来实现这一点

    strExpression = "/bookstore/book/name/value[../price>10.00]";

    NodeIter = nav.Select(strExpression);

    Console.WriteLine("Names of expensive books owners:");

    while (NodeIter.MoveNext())
    {
        Console.WriteLine("Owner Name: {0}", NodeIter.Current.Value);
    };


<?xml version="1.0" encoding="UTF-8"?>
<!-- This file represents a fragment of a book store inventory database -->
<bookstore>
   <book genre="autobiography">
      <OwnerName>
         <value>Alex dan</value>
      </OwnerName>
      <title>The Autobiography of Benjamin Franklin</title>
      <author>
         <first-name>Benjamin</first-name>
         <last-name>Franklin</last-name>
      </author>
      <price>8.99</price>
   </book>
   <book genre="novel">
      <OwnerName>
         <value>Pam Sanderson</value>
      </OwnerName>
      <title>The Confidence Man</title>
      <author>
         <first-name>Herman</first-name>
         <last-name>Melville</last-name>
      </author>
      <price>11.99</price>
   </book>
   <book genre="philosophy">
      <OwnerName>
         <value>Rogger Mark</value>
      </OwnerName>
      <title>The Gorgias</title>
      <author>
         <name>Plato</name>
      </author>
      <price>9.99</price>
   </book>
</bookstore>
strExpression=“/bookstore/book/name/value[../price>10.00]”;
NodeIter=nav.Select(strExpression);
Console.WriteLine(“昂贵书籍所有者的姓名:”);
while(NodeIter.MoveNext())
{
WriteLine(“所有者名称:{0}”,NodeIter.Current.Value);
};
亚历克斯·丹
富兰克林自传
本杰明
富兰克林
8.99
帕姆·桑德森
自信的人
赫尔曼
梅尔维尔
11.99
罗杰马克
高尔吉亚
柏拉图
9.99

我在这里做错了什么?非常感谢您的帮助首先,有必要更改XPath表达式

而不是

strExpression = "/bookstore/book/name/value[../price>10.00]";
使用

你写道:

/bookstore/book/name/value[../price>10.00]
为什么它不起作用:

  • XPath表达式开头缺少
    /
    (查找任意位置)
  • 您正在调用
    name
    元素,而不是
    ownername
    元素
  • 缺少一个
    (父运算符),因为您要使用
    /price
    (书籍
    的子项而不是
    所有者名称
  • 缺少用于测试
    书籍
    节点或
    价格
    节点的
    []
    (谓词)
总之,要修复XPath(遵循逻辑),您可以有2个语法:

//bookstore/book/ownername/value[../../price[.>10]]
//bookstore/book/ownername/value[../..[price>10]]
其他选项(或多或少消耗):


请注意,您正在学习一个已有20年历史且早已被取代的XPath版本。微软没有跟上XML世界的变化。然而,这并不影响这个例子。迈克尔,更新的那个是什么?anydocumentation:)XPath的当前版本是3.1。介于两者之间的是XPath2.0。搜索其中任何一个都会发现大量信息——更多关于2.0的信息,因为它已经存在了更长的时间。很大程度上取决于您喜欢阅读什么样的信息:就我个人而言,我直接进入W3C规范。
//bookstore/book/ownername/value[../../price[.>10]]
//bookstore/book/ownername/value[../..[price>10]]
//value[../..[price>10]]
//value[ancestor::book[1][price>10]]
//price[.>10]/preceding::value[1]