質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

4409閲覧

【ruby】to_xmlで変換した際についてくる<hash>タグを取り除きたい

FumiakiNakao

総合スコア180

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/06/09 11:42

Ruby on Railsでjsonを受け取り、それをxmlに変換して別APIにリクエストを送るプログラムを作っています
現状、受け取ったjsonは以下の方法でxmlに変換しております。

ruby

1xml_input=JSON.parse(request.body.read).to_xml

ですが、この方法で変換した場合、一番上に<hash>がついてしまい、別APIへのリクエストにおいて障害が出てしまいます。

以下、sampleとして、jsonと変換後のxmlを記載いたします。

json

1{ 2 "title": "Person", 3 "type": "object", 4 "properties": { 5 "firstName": { 6 "type": "string" 7 }, 8 "lastName": { 9 "type": "string" 10 }, 11 "age": { 12 "description": "Age in years", 13 "type": "integer", 14 "minimum": 0 15 } 16 }, 17 "required": ["firstName", "lastName"] 18} 19

xml

1<?xml version="1.0" encoding="UTF-8" ?> 2<!--↓これをなくしたい--> 3<hash> 4<title>Person</title> 5<type>object</type> 6<properties> 7<firstName> 8<type>string</type> 9</firstName> 10<lastName> 11<type>string</type> 12</lastName> 13<age> 14<description>Age in years</description> 15<type>integer</type> 16<minimumtype="integer">0</minimum> 17</age> 18</properties> 19<requiredtype="array"> 20<required>firstName</required> 21<required>lastName</required> 22</required> 23</hash> 24<!--↑これをなくしたい-->

xml変換時点で、<hash>をつかないようにする もしくは xmlに変換した後に<hash>を取り除く 方法があればご教授いただきたいです。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

調べたところStackOverflowにrootなし版を創った人がいました。

rb

1class Hash 2 def to_rootless_xml(options = {}) 3 require 'active_support/builder' unless defined?(Builder) 4 5 options = options.dup 6 options[:indent] ||= 2 7 options[:root] ||= 'hash' 8 options[:builder] ||= Builder::XmlMarkup.new(indent: options[:indent]) 9 10 builder = options[:builder] 11 builder.instruct! unless options.delete(:skip_instruct) 12 13 14 each { |key, value| ActiveSupport::XmlMini.to_tag(key, value, options) } 15 yield builder if block_given? 16 builder.target! 17 end 18end

投稿2018/06/09 13:45

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FumiakiNakao

2018/06/09 13:56

教えていただいた方法で解決できました!ありがとうございます!
guest

0

API ドキュメントを参照してみる限り、 to_xml には <hash/> を別の値に変更する方法はあっても 取り除く方法はないようですね

Nokogiri を用いて値を取り出す方法が考えられるかもしれません

ruby

1json_string = <<EOF 2{ 3 "title": "Person", 4 "type": "object", 5 "properties": { 6 "firstName": { 7 "type": "string" 8 }, 9 "lastName": { 10 "type": "string" 11 }, 12 "age": { 13 "description": "Age in years", 14 "type": "integer", 15 "minimum": 0 16 } 17 }, 18 "required": ["firstName", "lastName"] 19} 20EOF 21 22json = JSON.parse(json_string) 23xml = Nokogiri::XML.parse(json.to_xml) 24puts xml.root.children.to_s.strip

上のコードで次のような結果が得られます

xml

1<title>Person</title> 2 <type>object</type> 3 <properties> 4 <firstName> 5 <type>string</type> 6 </firstName> 7 <lastName> 8 <type>string</type> 9 </lastName> 10 <age> 11 <description>Age in years</description> 12 <type>integer</type> 13 <minimum type="integer">0</minimum> 14 </age> 15 </properties> 16 <required type="array"> 17 <required>firstName</required> 18 <required>lastName</required> 19 </required>

詳しくは Nokogiri のドキュメントを参照してみてください

何か参考になれば幸いです

Links

投稿2018/06/09 13:00

編集2018/06/09 13:02
gouf

総合スコア2321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FumiakiNakao

2018/06/09 13:48

回答ありがとうございます やってみたところ、hashのタグはなくなったのですが、`<?xml version="1.0" encoding="utf-8"?>`までもがなくなってしまいました… ともあれ、一歩先に進めました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問