Ruby 如何将带有符号和的字符串放入带有Nokogiri的xml文件中?

Ruby 如何将带有符号和的字符串放入带有Nokogiri的xml文件中?,ruby,xml,nokogiri,cdata,Ruby,Xml,Nokogiri,Cdata,我试图在XML文件中包含一个图像的URL,URL查询字符串中的符号被去掉: 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.

我试图在XML文件中包含一个图像的URL,URL查询字符串中的符号被去掉:

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.xpath('//Master')。每个do | elem|
part=elem.xpath('part')。内部文本
image=imagehash[部分]
image=”“如果image.blank?
elem.xpath('Image').first.content=“”
将elem.xpath('Image').first.content放在第一位
结束

bgdoc稍后将在生成器的帮助下写出。但不是单个元素,而是一次插入所有元素。这与SO上发布的类似问题不同。

您是否尝试用其xml/html字符代码替换符号?它应该是有效的

符号和的代码为:
&

您应该使用创建CDATA节点,然后将其添加到文档中,只需为
内容
分配一个字符串,您就可以使用
!CDATA…
在您的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)
我想这就是你想要的结果。但是,如果您只是将字符串分配给
内容

bgdoc.xpath('//Image').first.content = '<![CDATA[/where?is=pan&cakes=house]]>'
bgdoc.xpath('//Image')。first.content=''
然后您会得到以下XML:

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

![CDATA[/where?is=pan&;cakes=house]]

这甚至没有CDATA节点。

这里真正的问题是AKWF实际上并没有向文档中添加CDATA节点,他们只是添加一个字符串,该字符串将被XML编码以转义
,以及
&
。使用
&
而不是
&
将产生
&;amp在XML中。这正是发生的情况。
<?xml version="1.0"?>
<Master>
    <Image>&lt;![CDATA[/where?is=pan&amp;cakes=house]]&gt;</Image>
    <Image/>
</Master>