2017-07-05 125 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