1

私は eXist データベースに取り組んでいます。XQuery を使用して XML ファイルを実装する必要があるという新しいアイデアがあります

データベース コレクションに既にあるCSV ファイルを XMLに変換したいと考えています。そして、この XML ファイルには、必要なタグと情報だけが含まれています。そして、この変換されたデータはeXist データベースに XML に保存されます。

このような XML:その名前は「createXML.xml」です。

<?xml version="1.0" encoding="UTF-8"?>
<records>
// All the Records from CSV file want to put here..... between Records tags
</records>

CSV ファイルは次のようになります。

name,subject,marks    //header lines
krunal,maths,95
abc,sub1,87
def,sub2,67
...

このような出力

<?xml version="1.0" encoding="UTF-8"?>
<records>
   <user>
       <name>krunal</name>
       <subject>maths</subject>
       <marks>95</marks>
   </user>
   <user>
       <name>abc</name>
       <subject>sub1</subject>
       <marks>87</marks>
   </user>
   <user>
       <name>def</name>
       <subject>sub2</subject>
       <marks>67</marks>
   </user>
      .
      .
      .
</records>

eXist データベースで XQuery を使用して既に利用可能な XML に CSV データを追加し、この機能を実行する方法を教えてください。

4

2 に答える 2

1

ファイルを読むには、XQuery実装のドキュメントを参照してください。ここでは、eXistのファイルを読んでいます

ウィキブックスには、CSVを解析する方法に関する優れた例があります。

let $csv := 'name,faculty
alice,anthropology
bob,biology'

let $lines := tokenize($csv, '\n')
let $head := tokenize($lines[1], ',')
let $body := remove($lines, 1)
return
    <people>
        {
            for $line in $body
            let $fields := tokenize($line, ',')
            return
                <person>
                    {
                        for $key at $pos in $head
                        let $value := $fields[$pos]
                        return
                            element { $key } { $value }
                    }
                </person>
        }
    </people>

別の可能性は、ZorbaBaseXなどの組み込みのcsvインポートサポートを備えた別のXQueryエンジンを使用することです。

于 2012-04-12T07:15:00.740 に答える
0

(1) CSV ファイルが既にデータベースにあり、(2) CSV から XML への変換の結果を新しい XML ファイルに格納する場合、XQuery には次の 3 つの部分があります。

  1. util:binary-doc()および util:binary-to-string()を使用して CSV ファイルの内容を取得します。util:binary-to-string() は、ファイルが UTF-8 でエンコードされていることを前提としていますが、ドキュメントに示されているように、CSV ファイルに UTF-8 以外のエンコードが含まれている場合は、関数にエンコード スキームを伝えることができます。
  2. CSV の解析に関する XQuery Wikibook の記事(@Ranon の返信で既に言及されています) を使用して、CSV を目的の構造に変換します。このルーチンを独自の関数に適合させるために XQuery を十分に理解していることを前提としています。これを以下で local:csv-to-xml() と呼びます。
  3. xmldb:store()関数を使用して、結果の XML をデータベースに保存します。

(この機能は XQuery 仕様でカバーされていないため、util および xmldb モジュールは eXist-db 固有のモジュールであることに注意してください。別の XQuery 実装を使用する場合は、それらの実装固有のメソッドを使用する必要があります。)

したがって、ここに eXist-db ソリューションがあります。

let $csv-file := '/db/myCSV.csv'
let $csv-binary := util:binary-doc($csv-file)
let $csv := util:binary-to-string($csv-binary)
let $xml := local:csv-to-xml($csv)
return
    xmldb:store('/db', 'createXML.xml', $xml)

これにより、変換されたバージョンの myCSV.csv が createXML.xml として eXist データベースのルート (/db/createXML.xml) に保存されます。

代わりに、XML の結果を既存の XML ファイルに追加する場合は、XQuery Update 構文を適用する必要があります。これにより、データベースに格納されているドキュメントでノードの挿入、ノードの置換、およびノー​​ドの削除が可能になります。eXist-db では、eXist の XQuery Update 構文のドキュメントはhttp://exist-db.org/exist/update_ext.xmlにあります。

于 2012-04-12T20:58:51.137 に答える