xml - 带有谓词和条件的XPath表达式

标签 xml xpath

XPath表达中的错误在哪里?我需要检索所有上传的视频的平均评分均大于或等于3的所有用户的个人资料。

    <?xml version="1.0" encoding="UTF-8"?>
<smileyvideo>
   <video id="8628149">
      <uploader>satsuya.oda@example.com</uploader>
      <title>Bad Apple</title>
      <ratings>
         <rating user="epwager@example.com" value="1" />
         <rating user="ajenk@example.com" value="2" />
      </ratings>
   </video>
   <video id="123456">
      <uploader>ajenk@example.com</uploader>
      <title>Musician Cat</title>
      <ratings>
         <rating user="satsuya.oda@example.com" value="3" />
         <rating user="epwager@example.com" value="3" />
         <rating user="ajenk@example.com" value="4" />
      </ratings>
   </video>
   <video id="474920">
      <uploader>satsuya.oda@example.com</uploader>
      <title>Shrek</title>
      <ratings>
         <rating user="epwager@example.com" value="1" />
         <rating user="ajenk@example.com" value="1" />
      </ratings>
   </video>
   <!-- Users List -->
   <user>
      <name>Emil P. Wager</name>
      <email>epwager@example.com</email>
   </user>
   <user>
      <name>Satsuya Oda</name>
      <email>satsuya.oda@example.com</email>
   </user>
   <user>
      <name>Anthony J. Jenkins</name>
      <email>ajenk@example.com</email>
      <bio>I am a food scientist, currently working in iceland. Make sure to
check out my blog!</bio>
   </user>
</smileyvideo>


我的XPath表达式是

//user[preceding-sibling::video/uploader[avg((following-sibling::ratings/rating/@value))>=3]/text()=//user/email/text()]

最佳答案

XPath 1.0中没有avg()函数(我怀疑您在这里使用)。

试试这个:

//video[sum(ratings/rating/@value) div count(ratings/rating) >= 3]/uploader


或者,稍微短一些的变体:

//video[ratings[sum(rating/@value) div count(rating) >= 3]]/uploader




从那里转到<user>对象列表很简单:

//user[email = //video[ratings[sum(rating/@value) div count(rating) >= 3]]/uploader]




或者,当由于使用XPath 2.0+而使avg()作为功能可用时,甚至更短:

//user[email = //video[avg(ratings/rating/@value) >= 3]/uploader]

关于xml - 带有谓词和条件的XPath表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37747874/

相关文章:

java - 如何让 JAXB 中的解码器忽略 XML 根元素名称?

java - IzPack 安装程序,找不到元素“安装”的声明

xml - 我如何描述一个节点中对另一个节点的引用?

xslt - 根据字符串的结尾显示不同的xsl:attribute

sql - 我有一个 XML 脚本,如何在 Xpath 中编写查询?

xml - XPath,其中要求适用于比结果集中的节点更深的节点

xml - XPath 1.0:列出不同的值及其出现的次数

xml - Common Lisp Closure XML 包中广播处理程序的无效输出

python - Selenium,Xpath,选择节点内文本的特定部分

PHP 使用 xPath 查询 XML