2012-10-29 113 views
1

我想將plist文件轉換爲JUnit風格的XML文件。我有一個xsl樣式表,它將plist轉換爲JUnit/ANT XML。無法打開文件perl

這裏是我跑的plist中轉換爲XML Perl代碼:

my $parser = XML::LibXML->new(); 
my $xslt = XML::LibXSLT->new(); 
my $stylesheet = $xslt->parse_stylesheet_file("\\\~/Hudson/build/workspace/ui-automation/automation\\\ test\\\ suite/plist2junit.xsl"); 

my $counter = 1; 
my @plistFiles = glob('Logs/*/*.plist'); 
foreach (@plistFiles){ 
    #Escape the file path and specify abosulte path 
    my $plistFile = $_; 
    $plistFile =~ s/([()])/\\$1/g; 
    $path2plist = "\\\~/Hudson/build/workspace/ui-automation/automation\\\ test\\\ suite/$plistFile"; 
    #transform the plist file to xml 
    my $source = $parser->parse_file($path2plist); 
    my $results = $stylesheet->transform($source); 

    my $resultsFile = "\\\~/Hudson/build/workspace/ui-automation/automation\\\ test\\\ suite/JUnit/results$counter.xml"; 
    #create the output file 
    unless(open FILE, '>'.$resultsFile) { 
    # Die with error message 
    die "\nUnable to create $file\n"; 
    } 

    # Write results to the file. 
    $stylesheet->output_file($results, FILE); 
    close FILE; 
    $counter++; 
} 

哈德森/詹金斯運行perl腳本後,輸出此錯誤消息:

Couldn」 t/open/Hudson/build/workspace/ui-automation/automation \ test \ suite/Logs/Run \ 1/Automation \ Results.plist:沒有這樣的文件或目錄

錯誤是由代碼中的my $source = $parser->parse_file($path2plist);造成的。我無法弄清楚它爲什麼無法找到/讀取文件。

任何人都知道什麼可能會導致錯誤?

+0

真的嗎?使用'〜/ Hudson/build/workspace/ui-automation/automation \ test \ suite/Logs/Run \ 1/Automation \ Results.plist'這樣的文件名:'你不知道它爲什麼找不到文件? – friedo

+0

@friedo什麼?它不能採取文件路徑? – stackErr

+0

@friedo我不確定你的意見是什麼意思,你能解釋一下嗎? – stackErr

回答

3

在錯誤消息中提到的路徑中有三個明顯的錯誤。

~/Hudson/build/workspace/ui-automation/automation\ test\ suite/Logs/Run\ 1/Automation\ Results.plist 

這些都是:

  1. 有沒有在當前目錄中名爲~目錄。也許你打算在那裏使用$ENV{HOME}的值?
  2. 磁盤上的任何地方都沒有名爲automation\ test\ suite的目錄,但可能有一個名爲automation test suite的目錄。
  3. 同樣,磁盤上的任何地方都沒有名爲Run\ 1的目錄,但可能有一個名爲Run 1的目錄。
+0

哇,好吧,我現在覺得很蠢! – stackErr

+0

在一件事物插入另一件物品時使用逃逸。您有兩級轉義,但只有一級嵌入(Perl源代碼中的字符串)。 – ikegami