例如,我需要我的结果是这样的
<result>
<French>
<country>country-name</country>
<country>country-name</country>
...
</French>
<German>
<country>country-name</country>
<country>country-name</country>
...
</German>
</result>但目前,我的结果是
<language percentage="100">German</language>
<language percentage="32">French</language>
<language percentage="1">German</language>
<language percentage="100">French</language>
<language percentage="100">French</language>
<language percentage="100">German</language>
<language percentage="99">French</language>
<language percentage="100">French</language>
<language percentage="10">French</language>
<language percentage="32">German</language>
<language percentage="100">French</language>
<language percentage="18">French</language>
<language percentage="65">German</language>这是我的问题:
doc("countries.xml")//country/language[contains(text(), "French") or contains(text(), "German")]原始数据如下所示:
<country name="Afghanistan" population="22664136" area="647500">
<language percentage="11">Turkic</language>
<language percentage="35">Pashtu</language>
<language percentage="50">Afghan Persian</language>
</country>发布于 2012-07-25 02:35:47
使用XQuery,这将解决这个问题:
<result>
{
for $language in distinct-values(doc("countries.xml")//language)
return
element {translate($language, " ", "_")}
{
for $country in doc("countries.xml")//country[language = $language]
return element country {string($country/@name)}
}
}
</result>请注意,该语言不能立即用作标记名,因为它包含空格(如“阿富汗波斯语”)-因此调用了translate。
如果只需要指定的语言,请将for子句替换为
for $language in ("French", "German")发布于 2012-07-25 01:10:14
您可以对XML/Object使用LinQ,使用GroupBy创建查询并使用XMLWriter重写XML,或者将XML StyleSheet转换与xml/xsl一起使用。
发布于 2012-07-25 05:38:02
XPath只能选择输入文档中的节点。如果想要构造一个新的输出文档,可以使用XSLT或XQuery来实现,这两种方法都使用XPath从输入中选择节点,并添加工具来在输出中构造新节点。
https://stackoverflow.com/questions/11635824
复制相似问题