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>
我有一个 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>