【问题标题】:如何按另一个 XPATH 的所有值过滤属性
【发布时间】:2022-01-13 20:05:27
【问题描述】:

我在一个 XSL 页面中,我需要计算字段 Party 等于一个值的所有节点。

或者换个说法(我大致重建了逻辑......你应该明白这一点......) 我需要所有至少有 5 个学生的老师

  • 教师:/School/Teachers/@Id
  • 学生:/School/Students/@TeachersId

我可以数数,但我不能过滤... 我得到了这样的东西

count(/School/Students/@TeachersId = /School/Teachers/@Id)>5

但这是在计算任何老师的学生人数!我只需要学生人数超过 5 人的老师。

【问题讨论】:

  • 请发布minimal reproducible example 显示示例输入、您当前的 XSLT 和预期输出。还要说明您的处理器支持哪个版本的 XSLT。
  • P.S.如果学生通过老师的 id 与老师相关联,您应该定义一个 key 以通过@TeachersId 匹配学生。然后您可以使用谓词[count(key('student', @Id)) > 5] 选择学生人数超过5 人的教师。

标签: xml xslt xpath


【解决方案1】:

使用@TeachersId 作为查找键在Students 上创建xsl:key

<xsl:key
    name="students-by-teacher-id"
    match="Students"
    use="@TeachersId"/>

然后对于每个Teachers,您可以使用键选择所有具有Teachers/@Id 值的Students 为它们的@TeachersIdcount() 来测试里面是否有超过5 个谓词。

 /School/Teachers/@Id[count(key('students-by-teacher-id', .)) > 5]

【讨论】:

    猜你喜欢
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    相关资源
    最近更新 更多