gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:29:52 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com