に複数のような形式のXMLファイルを結合するために鋸山を使用します。は、どのように私はCSVファイルに複数のような形式のXMLファイルを解析したいCSV
私はnokogiri.org、Googleで検索し、SOのが、私は答えを見つけることができませんでした。
私は、現在のディレクトリに存在したノード/素子構造の点では同じ形式で10個のXMLファイルを、持っています。
単一のXMLファイルにXMLファイルを結合した後、私はadvisory
ノードの特定の要素を引き出す必要があります。私は、CSVファイルに出力link
、title
、location
、os -> language -> name
、およびreference -> name
データをしたいと思います。
私のコードは、単一のXML文書を解析することが可能であり、私はそれを考慮1に入れたいのですが:私は、複数のXMLファイルをサポートしてにそれらを取得するためのコードを変更しようとした
# Parse the XML file into a Nokogiri::XML::Document object
@doc = Nokogiri::XML(File.open("file.xml"))
# Gather the 5 specific XML elements out of the 'advisory' top-level node
data = @doc.search('advisory').map { |adv|
[
adv.at('link').content,
adv.at('title').content,
adv.at('location').content,
adv.at('os > language > name').content,
adv.at('reference > name').content
]
}
# Loop through each array element in the object and write out as CSV row
CSV.open('output_file.csv', 'wb') do |csv|
# Explicitly set headers until you figure out how to get them programatically
csv << ['Link', 'Title', 'Location', 'OS Name', 'Reference Name']
data.each do |row|
csv << row
end
end
:多くの鋸山:: XML :: Documentオブジェクトは:
xml_docs = []
Dir.glob("*.xml").each do |file|
xml = Nokogiri::XML(File.new(file))
xml_docs << Nokogiri::XML::Document.new(xml)
end
これが成功したことで、正しいオブジェクトの配列xml_docs
を作成しますが、私は1つのオブジェクトにこれらの6つのオブジェクトを変換する方法を知りません。
これはサンプルXMLです。すべてのXMLファイルは、同じノード/素子構造を使用します。
<advisories>
<title> Not relevant </title>
<customer> N/A </customer>
<advisory id="12345">
<link> https://www.google.com </link>
<release_date>2016-04-07</release_date>
<title> The Short Description Would Go Here </title>
<location> Location Name Here </location>
<os>
<product>
<id>98765</id>
<name>Product Name</name>
</product>
<language>
<id>123</id>
<name>en</name>
</language>
</os>
<reference>
<id>00029</id>
<name>Full</name>
<area>Not Defined</area>
</reference>
</advisory>
<advisory id="98765">
<link> https://www.msn.com </link>
<release_date>2016-04-08</release_date>
<title> The Short Description Would Go Here </title>
<location> Location Name Here </location>
<os>
<product>
<id>12654</id>
<name>Product Name</name>
</product>
<language>
<id>126</id>
<name>fr</name>
</language>
</os>
<reference>
<id>00052</id>
<name>Partial</name>
<area>Defined</area>
</reference>
</advisory>
</advisories>
コードは鋸山:: XML ::ドキュメントを活用するが、鋸山:: XML :: Builderは、このためのより良い動作する場合、私が調整して喜ん以上ですそれに応じて私のコード。
ようこそスタックオーバーフロー。あなたがここに回っていいのは残念ですが、残念ながらあなたはSOのポイントを逃しました。私たちはあなたの*コードの間違いや問題を修正するのを手伝っています。一番下のリンクを含む「[ask]」と「[mcve]」をお読みください。私たちはあなたの努力の証拠を見たいと思います:何を試しましたか?なぜそれは動作しませんでしたか?試していないと、どこで検索しましたか、なぜその場所に必要な情報がないのですか?私たちにXMLを渡し、あなたが何をしたいのかを私たちに伝えれば、あなたが書いたときに遭遇した問題を解決する方法を私たちに尋ねるのではなく、問題を解決するコードを書くことができます。 –
私はまもなく私が試みたもので私の質問を変更します。私はあまりにも長い間質問をしたくなかったが、私ができることがわかるだろう。メモをありがとう! –
ようこそ。 SOは、プログラミング問題、問題と解決策の料理の種類のオンライン参照であるという野心的な目標を持っています。彼らは検索エンジンのトップ結果からもわかるように、それをうまくやっていますが、質問と回答の質が高いままでいることを確認するという継続的な仕事です。長い質問は高品質を意味するものではないので、書くことや思考や努力をするのは難しいですが、最終結果は素晴らしいです。あなたは答えを得て、将来は他の人もやってください。みんなの問題を解決する戦いへようこそ! :-) –