0

例如,我需要我的结果是形式

<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>
4

3 回答 3

1

使用 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-24T18:35:46.633 回答
0

您可以使用 LinQ to XML/Object,使用 GroupBy 创建查询并使用 XMLWriter 重写 XML,或者将 XML StyleSheet Transform 与 xml/xsl 一起使用。

于 2012-07-24T17:10:13.847 回答
0

XPath 只能选择输入文档中的节点。如果您想构建一个新的输出文档,您可以使用 XSLT 或 XQuery 来做到这一点,两者都使用 XPath 从输入中选择节点,并添加设施以在输出中构建新节点。

于 2012-07-24T21:38:01.513 回答