NokogiriドキュメントをRubyのHashに変換する
2023-12-12 14:56:09
質問
Nokogiri XMLドキュメントをHashに変換する簡単な方法はありますか?
Railsのようなもの
Hash.from_xml
.
どのように解決するのですか?
libxml-ruby(1.1.3)を使っているのですが、このコードはどうしたらいいですか?私自身はnokogiriを使ったことはありませんが、いずれにせよlibxml-rubyを使用していることは理解しています。ROXMLもぜひ見てください ( http://github.com/Empact/roxml/tree ) も見てみることをお勧めします。これはxmlの要素をrubyのオブジェクトにマップします。
# USAGE: Hash.from_libxml(YOUR_XML_STRING)
require 'xml/libxml'
# adapted from
# http://movesonrails.com/articles/2008/02/25/libxml-for-active-resource-2-0
class Hash
class << self
def from_libxml(xml, strict=true)
begin
XML.default_load_external_dtd = false
XML.default_pedantic_parser = strict
result = XML::Parser.string(xml).parse
return { result.root.name.to_s => xml_node_to_hash(result.root)}
rescue Exception => e
# raise your custom exception here
end
end
def xml_node_to_hash(node)
# If we are at the root of the document, start the hash
if node.element?
if node.children?
result_hash = {}
node.each_child do |child|
result = xml_node_to_hash(child)
if child.name == "text"
if !child.next? and !child.prev?
return result
end
elsif result_hash[child.name.to_sym]
if result_hash[child.name.to_sym].is_a?(Object::Array)
result_hash[child.name.to_sym] << result
else
result_hash[child.name.to_sym] = [result_hash[child.name.to_sym]] << result
end
else
result_hash[child.name.to_sym] = result
end
end
return result_hash
else
return nil
end
else
return node.content.to_s
end
end
end
end
関連
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] Rubyで文字列を小文字・大文字に変換する方法
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] XMLでタグのブロックをコメントアウトするにはどうすればよいですか?
-
[解決済み] Javascriptで文字列からHashを生成する
-
[解決済み] Ruby on RailsでJSON出力を "きれい "にフォーマットする方法
-
[解決済み] Ruby/RailsでHashからキーを削除して残りのHashを取得する方法は?
-
[解決済み] RubyのハッシュオブジェクトをJSONに変換する方法は?
-
[解決済み】PHPパスワードのハッシュとソルトの安全性について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Googles IMPORTXMLが「インポートされたコンテンツは空です」エラーを返す
-
[解決済み] XMLの<![CDATA[]]>は何を意味するのですか?
-
[解決済み] Linearレイアウトでボタンを中央に配置する
-
[解決済み] DTDやXSDからサンプルXMLドキュメントを生成する方法は?
-
[解決済み] 参照されているアセンブリ PDB および XML ファイルが出力にコピーされないようにする
-
[解決済み] Vim インデント xml ファイル
-
[解決済み] フリーのXml Diff/Mergeツールはありますか?[クローズド]
-
[解決済み] DTDにおけるPCDATAとCDATAの違いについて
-
[解決済み] XMLでは、要素と属性のどちらを使うべきですか?重複
-
[解決済み] targetNamespaceとxmlnsの接頭辞なし、違いは何ですか?