この文書はファイアウォールの設定からの出力です。私はファイアウォールルールのハッシュを構築しようとしています。私は私が必要とするものは何でもCSV /コンソール/に後で出力このデータになります。RubyとNokogiriを使用してXMLを解析する方法
<table index="44" title=" from PUBLIC to DMZ administrative service rules on Firewall01" ref="FILTER.BLACKLIST">
<headings>
<heading>Rule</heading>
<heading>Action</heading>
<heading>Source</heading>
<heading>Destination</heading>
<heading>Service</heading>
<heading>Log</heading>
</headings>
<tablebody>
<tablerow>
<tablecell><item>test_inbound</item></tablecell>
<tablecell><item>Allow</item></tablecell>
<tablecell><item gotoref="CONFIG.3.452">[Group] test_b2_group</item></tablecell>
<tablecell><item>[Host] Any</item></tablecell>
<tablecell><item>[Host] Any</item></tablecell>
<tablecell><item>Yes</item></tablecell>
</tablerow>
<tablerow>
<tablecell><item>host02_inbound</item></tablecell>
<tablecell><item>Allow</item></tablecell>
<tablecell><item gotoref="CONFIG.3.447">[Group] host02_group</item></tablecell>
<tablecell><item>[Host] Any</item></tablecell>
<tablecell><item>[Host] Any</item></tablecell>
<tablecell><item>Yes</item></tablecell>
</tablerow>
<tablerow>
<tablecell><item>randomhost</item></tablecell>
<tablecell><item>Allow</item></tablecell>
**<tablecell><item gotoref="CONFIG.3.383">[Group] Host_group_2</item><item gotoref="CONFIG.3.382">[Group] another_server</item></tablecell>**
<tablecell><item gotoref="CONFIG.3.510">[Group] crazy_application</item><item gotoref="CONFIG.3.511">[Group] internal_app</item><item gotoref="CONFIG.3.525">[Group] online_application</item></tablecell>
<tablecell><item gotoref="CONFIG.3.783">[Group] junos-https</item></tablecell>
<tablecell><item>No</item></tablecell>
</tablerow>
</tablebody>
</table>
我々は、列のヘッダーおよび3つのファイアウォールルールを持っています。それらの分野で唯一の値があるので、
#!/usr/bin/env ruby
require 'nokogiri'
require 'csv'
fwpol = File.open(ARGV[0]) { |f| Nokogiri::XML(f) }
rule_array = []
fwpol.xpath('./table/tablebody/tablerow').each do |item|
rules = {}
rules[:name] = item.xpath('./tablecell/item')[0].text
rules[:action] = item.xpath('./tablecell/item')[1].text
rules[:source] = item.xpath('./tablecell/item')[2].text
rule_array << rules
end
puts rule_array
最初の2つのハッシュエントリ、完全に:name
と:action
作品:
は、ここに私のコードです。
コードを実行すると、複数の値がある場所には印刷されません。太字のXML行は、私が何を参照しているかを示しています。私は何とか値を繰り返し処理する必要がありますが、これまでのところ私の試みは無駄でした。
コードに問題がある場合は、問題を示すために必要な最小限のコードと最小限の入力データと、それに何が期待できるかを示す必要があります。 "[mcve]" –