gpt4 book ai didi

xpath - 高级 XPath 查询

转载 作者:行者123 更新时间:2023-12-03 16:13:03 28 4
gpt4 key购买 nike

我有一个如下所示的 XML 文件:

<?xml version="1.0" encoding="utf-8" ?>
<PrivateSchool>

<Teacher id="teacher1">
<Name>
teacher1Name
</Name>
</Teacher>

<Teacher id="teacher2">
<Name>
teacher2Name
</Name>
</Teacher>

<Student id="student1">
<Name>
student1Name
</Name>
</Student>

<Student id="student2">
<Name>
student2Name
</Name>
</Student>

<Lesson student="student1" teacher="teacher1" />
<Lesson student="student2" teacher="teacher2" />
<Lesson student="student3" teacher="teacher3" />
<Lesson student="student1" teacher="teacher2" />
<Lesson student="student3" teacher="teacher3" />
<Lesson student="student1" teacher="teacher1" />
<Lesson student="student2" teacher="teacher4" />
<Lesson student="student1" teacher="teacher1" />

</PrivateSchool>

还有一个与此 XML 相关的 DTD,但我认为它与我的问题没有太大关系。让我们假设所有需要的教师和学生都有明确的定义。

返回教师姓名的 XPath 查询是什么,其中至少有一名学生与他们一起上了 10 节课?

我正在查看许多 XPath 站点/示例。对于这种问题,似乎没有什么足够先进的了。

最佳答案

在单个 XPath 中进行复杂的连接可能是可能的,但是您的头撞在了砖墙上。 XQuery 或 XSLT 更适合这种事情。这是在 XQuery 中:

declare variable $doc as doc('data.xml');

declare function local:numLessons($teacher, $student) {
return count($doc//Lesson[@teacher = $teacher and @student = $student])
};

$doc//Teacher[some $s in //Lesson/@student satisfies local:numLessons(@id, $s) gt 10]/Name

这样做之后,如果您真的下定决心,可以将其简化为 XPath 2.0:
doc('data.xml')//Teacher[
for $t in . return
some $s in //Lesson/@student satisfies
count(//Lesson[@teacher = $t and @student = $s]) gt 10] /Name

未测试。

关于xpath - 高级 XPath 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4674219/

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