0

私はcsvを次のように持っています:

ID,Name,Age
1,qwerty,12
2,asdf,11
3,zxcvb,10

次のようにxmlを作成する必要があります。

<?xml version="1.0" encoding="UTF-8"?>

<entities>
    <entity>
        <field name="ID" value="1"/>
        <field name="Name" value="qwerty"/>
        <field name="Age" value="12"/>
    </entity>
        <entity>
        <field name="ID" value="2"/>
        <field name="Name" value="asdf"/>
        <field name="Age" value="11"/>
    </entity>
         <entity>
        <field name="ID" value="3"/>
        <field name="Name" value="zxcvb"/>
        <field name="Age" value="10"/>
    </entity>
</entities>

列名は csv ファイルごとに異なります。したがって、すべての列を取り込んで、示されているように xml を生成する一般的なジョブを作成したいと考えています。どんな助けでもいただければ幸いです

4

3 に答える 3

1

Talendを要求したので、列名を事前に知っていれば簡単です。必要なのはtFileInputDelimited->tFileOutputXMLだけだからです。列名がわからない場合(データファイルの最初の行にあります)、「動的列」をサポートするTalend Integration Suite(Talend Open Studioではない)を使用する必要があります。

ファイルのスキーマをDynamic型の単一の列として定義します。その列には、すべてのデータが含まれます。ただし、XMLとして書き出すには、(tJavaFlexコンポーネントで)手動でJavaコーディングを行う必要があります。それは難しいことではありません、そしてあなたがさらに助けが必要な場合、私はおそらくそれを行う方法をあなたに示すことができます。

しかし、私が言ったように、これはTalend Open Studioバージョンでは機能せず、サブスクリプションバージョンでのみ機能します。

于 2011-10-10T16:53:27.010 に答える
0

これを実行する必要があるXQueryプログラムは次のとおりです。

<entities>
{
  let $rows :=
    let $input := "ID,Name,Age
      1,qwerty,12
      2,asdf,11
      3,zxcvb,10"
    return tokenize($input, "&#10;")
  let $columns := tokenize(head($rows), ",")
  for $row in tail($rows)
  let $data := tokenize($row, ",")
  return 
    <entity>
    {
      for $column at $p in $columns
      return
        <field name="{$column}" value="{$data[$p]}"/>
    }
   </entity>
}
</entities>

try.zorba-xquery.comでテストすると、次のように出力されます。

<?xml version="1.0" encoding="UTF-8"?>
<entities>
  <entity>
    <field name="ID" value=" 1"/>
    <field name="Name" value="qwerty"/>
    <field name="Age" value="12"/>
  </entity>
  <entity>
    <field name="ID" value=" 2"/>
    <field name="Name" value="asdf"/>
    <field name="Age" value="11"/>
  </entity>
  <entity>
    <field name="ID" value=" 3"/>
    <field name="Name" value="zxcvb"/>
    <field name="Age" value="10"/>
  </entity>
</entities>
于 2011-10-10T14:17:19.683 に答える
0

これを試して

   /**
   * Converts a CSV file to a simple XML file
 *
 * @param string $file
 * @param string $container
 * @param string $rows
 * @return string
 */
   function csv2xml($file, $container = 'data', $rows = 'row')
{
        $r = "<{$container}>\n";
        $row = 0;
        $cols = 0;
        $titles = array();

        $handle = @fopen($file, 'r');
        if (!$handle) return $handle;

        while (($data = fgetcsv($handle, 1000, ',')) !== FALSE)
        {
             if ($row > 0) $r .= "\t<{$rows}>\n";
             if (!$cols) $cols = count($data);
             for ($i = 0; $i < $cols; $i++)
             {
                  if ($row == 0)
                  {
                       $titles[$i] = $data[$i];
                       continue;
                  }

                  $r .= "\t\t<{$titles[$i]}>";
                  $r .= $data[$i];
                  $r .= "</{$titles[$i]}>\n";
             }
             if ($row > 0) $r .= "\t</{$rows}>\n";
             $row++;
        }
        fclose($handle);
        $r .= "</{$container}>";

        return $r;
}

$xml = csv2xml('/home/user/myfile.csv', 'people', 'person');

?>

これは次の場所にあります: http://www.hotscripts.com/listing/convert-a-csv-file-to-xml-using-php/

于 2011-10-10T13:55:57.763 に答える