Xpath - remove/elimiate 复制并获取字符的位置并检查字符是否相等

Xpath - remove/elimiate duplicates & get position of a character & check for equality of character

我被要求针对以下 HTML 代码编写一些 xpath 查询:

<catalog>
 <book id="bk101">
  <author>Gambardella, Matthew</author>
  <title>XML Developer's Guide</title>
  <genre>Computer</genre>
  <shops>
   <shop name="Best Books">
    <price>44.95</price>
   </shop>
   <shop name="Books and More">
    <price>48.95</price>
   </shop>
  </shops>
  <publish_date>2000-10-01</publish_date>
  <description>
  An in-depth look at creating applications with XML.
  </description>
 </book>

..... 10 本这种风格的书

</catalog>

查询是:

一个。 Return 所有书籍价格低于 10 美元的商店。 我的查询:/catalog/book/shops/shop[price<10]
问题:return同店节点多(因为同店 以不到 10 美元的价格卖出超过一本书)。 问题A: 如何remove/eliminate复制?

b。 Return 2000 年后出版一本书的所有作者。 我的查询:/catalog/book[publish_date/text()[1]='2']/author 问题:不起作用,试图获取 publish_date 的第一个字符 并检查它是否等于 2。 questionB: 如何获取文本节点的第一个字符并检查它是否 等同于其他角色?

1) Select shop 这样就没有 shopprice 小于 10 并且在 [=16 之前具有相同的 name 标签=]

/catalog/book/shops/shop[price<10 and not(@name = preceding::shop[price<10]/@name)]

2) 在减号之前获取子字符串,转换为数字并与 2000 进行比较。要删除双打,您可以使用与 1)

中相同的技巧
/catalog/book[number(substring-before(publish_date,"-")) >= 2000]/author