나는 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 },