私は8つのxmlファイルを持っていて、mysqlでこのレコードに対していくつかのことをする必要があります。これらのIDをmysqlに保存する良い方法は何ですか?
<?xml version="1.0" encoding="utf-8"?>
<Records>
<Record>
<RecordMain>
<Provider/>
<ProviderID>M14723</ProviderID>
...
私は、これらのXML IDだけを含む新しいシンプルなテーブルに挿入ステートメントを作成するために使用できるテキストファイルの賢いgrepがあると思いました。残念ながら、私はまだ基本的なUNIXツールに精通していません。
事前にありがとう
答え1
grep
XMLロードに適したツールではありません。 XMLはマークアップ中心のデータ構造であるため、行中心のデータ構造(たとえばgrep
)はサブセットにのみ適用されます。時々あなたはそれから逃げるが、あなたはいつも誰かが「アップストリーム」が完全に有効なXMLを生成したが、仕様に従わなかったために機能しない場合、生成されたコードは壊れやすく、汚れやすくなります。
したがって、コメントで参照されている「LOAD XML」に加えて、次のものも含まれます。https://stackoverflow.com/questions/13833568/automated-way-to-convert-xml-files-to-sql-database
XMLからデータを抽出するPerlソリューションを提供します。
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
my @ID_list;
sub extract_provider_ID {
my ( $twig, $provider ) = @_;
push ( @ID_list, $provider -> text );
}
my $twig = XML::Twig->new(
'twig_handlers' => { 'ProviderID' => \&extract_provider_ID },
);
$twig->parsefile( 'your_file.xml' );
print join ("\n", @ID_list );
@ID_list
これで、各「ProviderID」を埋める適切なインサートを見つけることができると確信しています。注 – 階層を無視します。ProviderID
すべての要素を見つけて返します。必要に応じて、対応する階層を要求できます。たとえば、次のようになります。
'twig_handlers' => { 'Record/RecordMain/ProviderID' => \&extract_provider_ID },