2011-12-20 15 views
2

私はXMLファイル内の画像へのURL、およびURLのクエリ文字列にアンパサンドを含めるようにしようとしているが取り除かなっていますNokogiriでXMLファイルにアンパサンドの文字列を挿入するにはどうすればよいですか?

bgdoc.xpath('//Master').each do |elem| 
    part = elem.xpath('Part').inner_text 
    image = imagehash[part] 
    image = "" if image.blank? 
    elem.xpath('Image').first.content = "<![CDATA[#{image}]]>" 
    puts elem.xpath('Image').first.content 
end 

bgdocは後でビルダーの助けを借りて書かれてきています。しかし個々の要素ではなく、一度にすべてが挿入されます。これは、SOに掲載された同様の質問とは異なるケースになります。

答えて

2

あなただけcontentに文字列を割り当て、文書に追加しCDATAノードを作成するためにcreate_cdataを使用して、add_childする必要がありますままにしますあなたのXMLに&lt;!CDATA...とあなたはそれほど有用ではありません。あなたはbgdoc.to_xmlあなたはこのような何か買ってあげるならば、次に

xml = '<Master><Image></Image><Image></Image></Master>' 
bgdoc = Nokogiri::XML(xml) 
cdata = bgdoc.create_cdata('/where?is=pan&cakes=house') 
bgdoc.xpath('//Image').first.add_child(cdata) 

<?xml version="1.0"?> 
<Master> 
    <Image><![CDATA[/where?is=pan&cakes=house]]></Image> 
    <Image/> 
</Master> 

を、私はそれはあなたが探している結果の一種だと思う

短い例では、プロセスを説明すべきですために。しかし、あなただけのcontentに文字列を割り当てた場合:

bgdoc.xpath('//Image').first.content = '<![CDATA[/where?is=pan&cakes=house]]>' 

は、その後、あなたは、このXMLを取得:

<?xml version="1.0"?> 
<Master> 
    <Image>&lt;![CDATA[/where?is=pan&amp;cakes=house]]&gt;</Image> 
    <Image/> 
</Master> 

をしているにもCDATAノードを持っていません。

1

アンパサンドをxml/html文字コードに置き換えようとしましたか?それは機能しているはずです。

アンパサンドのコードは次のとおりです。 &amp;

Click here for more information about character codes.

+0

本当の問題は、AKWFが文書にCDATAノードを実際に追加していないことです。文字列をXMLにエンコードして '<', '>'と '&'をエスケープするだけです。 '&'の代わりに '&'を使用すると、XMLに '& amp;'が生成されます。 –

+0

これはまさに何が起こったかです。 – AKWF

関連する問題