关闭。这个问题需要更多 focused 。它目前不接受答案。
想改进这个问题?更新问题,使其仅通过 editing this post 关注一个问题。
7年前关闭。
Improve this question
我有近 100 个 XML 文件,其中包含标签内的各种存储过程名称。每个文件可能包含多个 SP 或相同的重复。
<DataSourceName>SQL300</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>dbDummy.dbo.abc456Audit </CommandText>
我接手了一个项目,将 SQL 服务器数据迁移到 SAS 网格,并将所有 SSRS 报告迁移到 SAS。我将不得不映射所有数据。
是否有任何简单的 Linux/perl/VBA/Python 方法可以一步完成?
我想要类似的东西:
File Name Stored Procedures
Audit93 dbDummy.dbo.abc456Audit
Audit93 dbDummy.dbo.abc123Audit
我试过:grep、sed、awk、perl、VBA。
这里和其他地方描述的方法。我可以将所有标签信息提取到一个平面文件中,但与我在上面寻找的内容完全不同。我需要一些技术来提取文件名和标签。
如果有人能阐明如何解决这个问题,我将不胜感激。
谢谢!
最佳答案
你可以试试下面的代码:
use strict;
use warnings;
use Excel::Writer::XLSX;
my $dir = $ARGV[0];
opendir(DIR, "$dir") || die "Couldn't open the directory - $!";
my @files = grep(/\.xml$/,readdir(DIR));
my $OutFile = "Output". "\." . "xlsx";
my $workbook = Excel::Writer::XLSX->new($OutFile);
my $worksheet = $workbook->add_worksheet('SotredProcedures');
# Create a format for the column headings
my $header = $workbook->add_format();
$header->set_bold();
$header->set_color('red');
# Create a Text Wrap format
my $format1 = $workbook->add_format();
$format1->set_text_wrap();
$worksheet->write(0, 0, "Filenames", $header);
$worksheet->write(0, 1, "Stored Procedures", $header);
$worksheet->set_column(0, 1, 12);
$worksheet->set_column(1, 2, 100);
my $row=1;
foreach our $filename (@files){
my $document = do {
local $/ = undef;
open my $fh,'<',$filename or die "Couldn't open the file $filename:$!";
<$fh>;
};
my $checkval = "false";
while($document =~ /<CommandText>(.*?)<\/CommandText>/isg)
{
if($1 ne "")
{
$checkval = "true";
$worksheet->write($row,0,$filename,$format1);
$worksheet->write($row,1,$1,$format1);
$row++;
}
}
if($checkval eq "false")
{
print "No <CommandText> Value in $filename\n";
}
}
关于xml - 从 XML 文件中提取标签信息到 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30146123/