0

想使用 xquery 将以下 flax xml 文件转换为 5 级层次结构 xml 结构,到目前为止我编写的所有 xquery 代码都不起作用。

<data>
<row>
    <Year>1999</Year>
    <Quarter>8</Quarter>
    <Month>5</Month>
    <Week>10</Week>
    <Flight>6/11/1995</Flight>
    <Un>WN</Un>
    <Air>193</Air>

</row>
<data>

结果我想要:

<data>
   <row>
     <Year>
            <value>1999</value>
            <Quarter>
                <value>8</value>
                <Month>
                    <value>5</value>
                    <Week>10</Week>
                    <Flight>6/11/1995</Flight>
                    <Un>WN</Un>
                    <Air>193</Air>
                </Month>
            </Quarter>
        </Year>
    </row>
<data>
4

2 回答 2

0

目前尚不清楚您正在使用什么 XQuery 处理器,或者您需要处理的数据的确切模式,但这里有一个如何转换数据的示例,假设每一行包含一组唯一的条目:

let $data :=
    <data>
    <row>
        <Year>1999</Year>
        <Quarter>8</Quarter>
        <Month>5</Month>
        <Week>10</Week>
        <Flight>6/11/1995</Flight>
        <Un>WN</Un>
        <Air>193</Air>    
    </row>
    </data>    
for $row in $data/row
return 
    element row {
      element Year {
        element value { $row/Year/data() },
        element Quarter {
          element value { $row/Quarter/data() },
          element Month {
            element value { $row/Month/data() },
            $row/Week,
            $row/Flight,
            $row/Un,
            $row/Air
          }
        }
      }
    }
于 2013-09-06T19:05:13.667 回答
0

如果您想要每个年/季度/月的单个元素,请使用以下代码:

<data>
  <row>{
    for $year in //row/Year/data()
    return
      <Year>{
        <value>{ $year }</value>,
        for $quarter in //row[Year=$year]/Quarter/data()
          return
            <Quarter>{
              <value>{ $quarter }</value>,
              for $row in //row[Year=$year and Quarter=$quarter]
              return
                <Month>{
                  <value>{ Month/data() }</value>,
                  $row/*[not(local-name(.) = ('Month', 'Quarter', 'Year'))]
                }</Month>
            }</Quarter>
      }</Year>
  }</row>
</data>
于 2013-09-06T19:09:02.900 回答