1

1 つのデータベースから大量のデータを取得し、XML 経由でアプリケーションに供給しています。

だから私はから始めます

    re_objects_xml = Document.new
    re_objects_xml.context[:attribute_quote] = :quote
    re_objects_xml.context[:raw] = 'true'
    re_objects_xml.add_element("object-collection")                        
    base_object_collection = re_objects_xml.elements[1]

    timeline_meta = Element.new("Metadata")
    timeline_meta.add_attribute("id", "#{re_meta_id}")

次に、次の変数があります。

k = "Comments"
v = "We're pretty good"

そして私はそうします

timeline_meta.add_attribute("#{k}","#{v}")

そして、timeline_meta を base_object_collection に追加します

base_object_collection << timeline_meta

私はこれを含むXMLになります:

   ...Comments="GRUBB:  We&apos;re pretty good... 

私は取得しようとしています

 ...Comments="GRUBB:  We're pretty good...

不足しているものや、これを行うためのより良い方法を誰かが教えてくれますか?

4

2 に答える 2

1

一重引用符/アポストロフィがエンティティに変換されることを心配しているのはなぜですか? XML パーサー/エンジンは、あいまい/衝突する可能性のある区切り文字を保持するためにこれを行います。Character Data と Markupに関する XML 仕様から:

To allow attribute values to contain both single and double quotes, the
apostrophe or single-quote character (') may be represented as " &apos; ", and
the double-quote character (") as " &quot; ".

またはCommentsを使用してパラメーターのコンテンツを区切ることができるため、仕様では、埋め込まれた一重引用符と二重引用符をエンティティとしてエンコードし、衝突を回避できます。'"

XML が受信側で解析されると、そのエンティティを正しい文字にデコードするか、簡単にする関数/メソッドが必要です。使用している DBM を指定しませんが、役立つはずですが、それは別の質問です。

コードの文体として:

timeline_meta.add_attribute("#{k}","#{v}")

間違っている。文字列を文字列に冗長に変換しています。使用する:

timeline_meta.add_attribute(k, v)

代わりは。

于 2012-12-06T15:46:50.040 に答える