如何更改XPath查询返回的节点的值?

如何更改XPath查询返回的节点的值?,xpath,Xpath,例如,我需要我的结果的形式 <result> <French> <country>country-name</country> <country>country-name</country> ... </French> <German> <country>country-name</country> <country&g

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

<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>
原始数据如下所示:

<country name="Afghanistan" population="22664136" area="647500">
    <language percentage="11">Turkic</language>
    <language percentage="35">Pashtu</language>
    <language percentage="50">Afghan Persian</language>
</country>

突厥语
普什图语
阿富汗波斯人

您可以使用LinQ转换为XML/Object,使用GroupBy创建查询并使用XMLWriter重写XML,或者使用XML/xsl一起使用XML样式表转换。

使用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>

XPath只能选择输入文档中的节点。如果您想构造一个新的输出文档,可以使用XSLT或XQuery来实现,两者都使用XPath从输入中选择节点,并添加工具来在输出中构造新节点

  <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>
    for $language in ("French", "German")