1

私は現在、いくつかの XML 解析を行っており、使いやすさと構文のために Hpricot を使用することを選択しましたが、いくつかの問題が発生しています。見つけた XML データを別のファイルに書き込む必要があります。ただし、これを行うと、形式は保持されません。たとえば、コンテンツが次のようになっているとします。

<dict>
  <key>item1</key><value>12345</value>
  <key>item2</key><value>67890</value>
  <key>item3</key><value>23456</value>
</dict>

そして、ドキュメントにこのようなエントリがたくさんあると仮定します。を使用して「dict」アイテムを繰り返し処理しています

hpricot_element = Hpricot(xml_document_body)
f = File.new('some_new_file.xml')
(hpricot_element/:dict).each { |dict| f.write( dict.to_original_html ) }


上記のコードを使用すると、出力は上記の XML とまったく同じように次のようになります。しかし、驚いたことに、ファイルの出力は次のようになります。

<dict>\n", "    <key>item1</key><value>12345</value>\n", "    <key>item2</key><value>67890</value>\n", "    <key>item3</key><value>23456</value\n", "  </dict>


「\n」文字で分割して一度に 1 行ずつファイルに書き込もうとしましたが、「\n」文字を認識しなかったため、どちらもうまくいかなかったようです。どんな助けでも大歓迎です。それは非常に単純な解決策かもしれませんが、見つけるのに苦労しています。ありがとう!

4

2 に答える 2

0

私の解決策は、リテラルの'\ n'文字を改行に置き換え、次のような2つのgsubを追加するだけで、余分な句読点を削除することでした。

f.write( dict.to_original_html.gsub('\n', "\n").gsub('" ,"', '') )


なぜこれを見なかったのかわかりません。私が言ったように、それは私が見ていなかったという簡単な答えかもしれません、そしてそれはまさにそれが判明した方法です。すべての答えをありがとう!

于 2010-06-03T13:28:29.727 に答える
0
hpricot_element = Hpricot::XML(xml_document_body)

File.open('some_new_file.xml', 'w') {|f| f.write xml_document_body }

元の xml を書きたい場合は、xml パーサーを使用しないでください。不要です。ただし、データをさらに処理する場合は、引き続き 1 つを使用する必要があります。

また、XML の場合は、Hpricot::XMLの代わりにを使用する必要がありますHpricot

于 2010-06-02T23:49:53.750 に答える