我有一個XML文件,我需要使用Perl將其傳遞到列表(不使用XSLT)。Perl使用困難正則表達式從XML寫入字符串
這是我的(simplyfied,像10多個屬性去掉,使其更容易閱讀!)XML:
...
<XMLTAG ID="1" name="NAME1" status="0" date1="24.05.2012 13:37:00" date2="25.05.2012 13:37:00" />
<XMLTAG ID="2" name="NAME2" status="1" date1="24.05.2012 13:37:00" date2="25.05.2012 13:37:00" />
<XMLTAG ID="3" name="NAME3" status="0" date1="24.05.2012 13:37:00" date2="25.05.2012 13:37:00" />
...
我走到這一步:
my $input = in.xml;
my $output = out.txt;
# open input
open(INPUT, $input)
|| die "Can't find $input: $_";
# open output
open(OUTPUT, ">$output")
|| die "Can't find $output: $_";
# run until perl returns undef (at the end of the file)
while (<INPUT>) {
if ($_ == /date1=\"[0-3]?[0-9].[0-3]?[0-9].(?:[0-9]{2})?[0-9]{2} [0-5][0-9]:[0-5][0-9]:[0-5][0-9]\"/) {
print OUTPUT $_;};
}
close(INPUT);
close(OUTPUT);
輸出文件應該是像這樣:
date1="24.05.2012 13:37:00"
date1="24.05.2012 13:37:01"
date1="24.05.2012 13:37:02"
...
由於提前, 馬利
讓我給你一個代碼,t這裏有一個很好的正則表達式在45行匹配的名字。你應該明確匹配名稱以獲得更好的可讀性:https://github.com/seckin206/Log2KML-Parser/blob/master/logviewer.pl –
** if( m#date1 =「([^」] +)#){print「date1 = $ 1」; } ** – tuxuday
永遠不要使用正則表達式解析XML/HTML/CSV文件。使用現有的模塊,它們通常是成熟的,穩定的並且經過良好測試。 – dgw