2011-12-20 39 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

您應該使用create_cdata創建一個CDATA節點,然後add_child將其添加到該文件,只是分配一個字符串content將離開你在你的XML中使用&lt;!CDATA...,這不是很有用。

簡單例子應該說明這個過程:

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) 

然後,如果你bgdoc.to_xml你會得到這樣的事情:

<?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;'。 – 2011-12-20 21:06:21

+0

這正是發生的事情。 – AKWF 2011-12-20 22:17:05

相關問題