2017-07-05 3 views
-1

ich einen Text/xml-Datei, die die folgenden DatenChef Datei lesen Pattern Matching

<?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> 

ich folgend in meinem Koch Rezepte lesen wollte enthält, so habe ich diese. Ich wollte den Wert "7619f915-420d-4220-993e-1d3f1bee0ba4" bekommen, also lief ich es durch meine Regexp. Ich bin mir nur nicht sicher, warum ich das nicht erreichen kann.

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 

Irgendwelche Hinweise?

+0

Mit '=' Sie zuweisen, versuchen Sie es zu '==' zu ändern, um den linken Wert mit dem rechten zu vergleichen. –

+0

Und woher kommt 'match'? –

+0

Ich habe die Codezeile bearbeitet ... Entschuldigung, ich habe einen Fehler gemacht, Code-Unordnung entfernt ... Aber kann immer noch nicht übereinstimmen. –

Antwort

1

Das Parsen von XML mit Regex ist normalerweise eine schlechte Idee. Möglicherweise möchten Sie einen Ruby-XML-Parser verwenden, z. B. Nokogiri.

+0

Ich habe versucht, dies in meinem Chef Ruby Block hinzufügen "require 'Nokogiri'", aber es sagt, kann Datei 'Nokogiri' nicht laden. Ich habe Chef-Solo 12, weiß einfach nicht warum und wie es richtig geht. –

+0

Fügen Sie 'chef_gem" nokogiri "' vorher hinzu. Nicht sicher, ob der Chef bereits mit einem anderen XML-Parser ausgeliefert wird. – StephenKing

+0

Wir liefern Nokogiri in den meisten der Chef-Installationspakete, weil es höllisch zu installieren ist. Sie wollen wirklich nicht versuchen, 'chef_gem' zu verwenden, es wird entweder langsam oder kaputt sein oder beides. – coderanger