Return 使用 XQuery 在 XML 中使用属性的次数

Return a number of how many times an attribute has been used in XML using XQuery

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

<CITY>
<STREET>
<HOUSE>
<FLAT>
<INHABITANT Year="1990" Gender="M">John Doe</INHABITANT>
<INHABITANT Year="1990" Gender="F">Jane Doe</INHABITANT>
<INHABITANT Year="1990" Gender="M">John Doe</INHABITANT>
</FLAT>
</HOUSE>
</STREET>
</CITY>

使用 XQuery 我需要 return 这个:

<GENDERS><FEMALES>1</FEMALES><MALES>2</MALES></GENDERS>

我该怎么做? 代码是什么? 据我了解,XQuery 是针对 XML 的,而 SQL 是针对数据库的,所以这给了我一个想法。这是一个需要 XQuery 的学校项目,我对此没有经验。

一种可能的解决方案如下:

let $doc := document {
   <CITY>
    <STREET>
      <HOUSE>
        <FLAT>
          <INHABITANT Year="1990" Gender="M">John Doe</INHABITANT>
          <INHABITANT Year="1990" Gender="F">Jane Doe</INHABITANT>
          <INHABITANT Year="1990" Gender="M">John Doe</INHABITANT>
        </FLAT>
      </HOUSE>
    </STREET>
  </CITY>
}
return element GENDERS {
  let $genders := $doc//INHABITANT/@Gender
  return (
    element FEMALES { count($genders[. = 'F']) },
    element MALES   { count($genders[. = 'M']) }
  )
}

结合我在 post 中得到的答案,我制作了这段代码,它完全可以按需要工作。感谢所有参与进来的人 (Christian Grūn)

let $male:=//INHABITANT[@Gender="M"]
let $female:=//INHABITANT[@Gender="F"]
return 
<GENDERS>
<FEMALES>{count($female)}</FEMALES>
<MALES>{count($male)}</MALES>
</GENDERS>