2017-07-05 159 views
-1

我有一個包含以下數據廚師讀取文件模式匹配

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<GovernmentPolicy> 
    <name>Sample Policy</name> 
    <description>Policy set during enrollment</description> 
    <Resources> 
     <ResourceID>7619f915-420d-4220-993e-1d3f1bee0ba4</ResourceID> 
    </Resources> 
<GovernmentPolicy> 

我想讀我的廚師食譜以下,所以我有這樣的一個文本/ xml文件。我想要得到值「7619f915-420d-4220-993e-1d3f1bee0ba4」 ,所以我運行它通過我的正則表達式。我只是不確定爲什麼我不能匹配這個。

ruby_block "Read GovernmentPolicy" do 
    block do 
    resourceID = "" 
    governmentpolicies = "/temp/governmentpolicies.xml" 
    if File.exists?("#{governmentpolicies}") 
     f = File.open("#{governmentpolicies}", 'r') 
     pattern = /^\<ResourceID\>/ 
     f.each {|line|  
     if pattern.match(line) 
      puts("***************MATCH FOUND*******************") 
      puts line 

     end 
     } 
     f.close 
     end 
    end 
end 

任何提示?

+0

用'='指定,嘗試將它改爲'=='來比較左邊的值和右邊的值。 –

+0

「匹配」從哪裏來? –

+0

我編輯了代碼行...對不起,我犯了一個錯誤,消除了代碼混亂...但仍然無法匹配它。 –

回答

1

使用正則表達式解析XML通常是一個壞主意。您可能想要使用Ruby XML解析器,如Nokogiri

+0

我曾嘗試在我的廚師Ruby塊「需要'nokogiri'」中添加這個,但它說不能加載文件'nokogiri'。我用了廚師獨奏12,只是不知道爲什麼以及如何正確地做到這一點。 –

+0

之前加入'chef_gem「nokogiri」'。不知道廚師是否已經與其他任何XML解析器一起提供。 – StephenKing

+0

我們在大多數Chef安裝包中發佈nokogiri,因爲它是安裝地獄。你真的不想嘗試使用'chef_gem',它會慢或者破碎,或者兩者兼而有之。 – coderanger