4

従業員名とその従業員が行った仕事を含む XML ファイルがあります。XML ファイルの構造は次のとおりです。

<Employee>AAA@A#B#C#D</Employee>
<Employee>BBB@A#B#C#D</Employee>
<Employee>CCC@A#B#C#D</Employee>
<Employee>DDD@A#B#C#D</Employee>

何千ものレコードがあり、構造を次のように変更する必要があります -

<Employee>
  <Name>AAA</Name>
  <Jobs>
   <Job>A</Job>
   <Job>B</Job>
   <Job>C</Job>
   <Job>D</Job>
  </Jobs>
</Employee>

BaseX で XQuery を使用してこれを行うにはどうすればよいですか?

4

2 に答える 2

4

3 つの XQuery 関数、substring-beforesubstring-afterおよびtokenizeを使用して、必要な出力を取得します。

substring-before名前を取得するために使用されます。

同様に、substring-afterは Job 部分を取得するために使用されます。

次に、tokenize関数を使用してジョブを分割します。

let $data :=
  <E>
    <Employee>AAA@A#B#C#D</Employee>
    <Employee>BBB@A#B#C#D</Employee>
    <Employee>CCC@A#B#C#D</Employee>
    <Employee>DDD@A#B#C#D</Employee>
  </E>


for $x in $data/Employee
return 

<Employee>
   {<Name>{substring-before($x,"@")}</Name>}
   {<Jobs>{
   for $tag in tokenize(substring-after($x,"@"),'#')
   return 
     <Job>{$tag}</Job>
   }</Jobs>
}</Employee>

HTH...

于 2013-12-23T06:18:38.530 に答える