我有 8 个 xml 文件,需要在 mysql 中对这些记录做一些工作。将这些ID存入mysql的好方法是什么?
<?xml version="1.0" encoding="utf-8"?>
<Records>
<Record>
<RecordMain>
<Provider/>
<ProviderID>M14723</ProviderID>
...
我想这将是对文本文件的一些巧妙的 grep,我可以使用它来创建插入语句到一个新的、简单的表中,该表只包含这些 xml id。不幸的是,我还不太熟悉基本的 UNIX 工具......
提前致谢
答案1
grep
不是适合加载 XML 的工具。 XML 是一种面向标记的数据结构,因此任何面向行的数据结构(例如grep
)仅适用于一个子集。有时你会侥幸逃脱,但你总是当“上游”某人生成完全有效的 XML 但由于您没有遵循规范而无法工作时,创建的代码脆弱且容易混乱地爆炸。
因此,除了注释中引用的“LOAD XML”之外:https://stackoverflow.com/questions/13833568/automated-way-to-convert-xml-files-to-sql-database
我将提供一个 Perl 解决方案来从 XML 中提取数据。
#!/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 },