我可以使用Nokogiri .content方法更改XML节点内容吗?

时间:2013-05-22 16:44:09

标签: ruby xml nokogiri

下面代码的目标是获取XML代码。 取出标签vco:参数,克隆它 替换名称和值,并将其重新插入XML文本。 但是,当我试图替换子节点的内容时:

  cloneParam.at( '//vco:string' ).content = param[ :value ]

当我检索此子节点时,我看到已完成更改

  puts "Node values: #{cloneParam.at( '//vco:string' ).to_xml}"

但是当我试图将整个节点转换回XML时,我发现变化是锥形和

<vco:string>value</vco:string> 

有旧价值......

 puts "Parameter  : #{cloneParam.to_xml}"

这里做错了什么?

#
# Input
#   params = [ {name=>parameterName, value=>parametersValue} ... ] 
#   Currently only string parameters are supported
# Output
#   XML string supported by vCO
# 
def self.prepareWorkflowParameters( params )
    executionContext =  
        '<?xml version="1.0" encoding="Windows-1251"?>
        <vco:execution-context xmlns:vco="http://www.vmware.com/vco" xmlns="vco">
            <vco:parameters>
                <vco:parameter name="name" type="string" description="" scope="local">      
                    <vco:string>value</vco:string>
                </vco:parameter>
            </vco:parameters>
        </vco:execution-context>'



    docExCon = Nokogiri.XML(executionContext)
    docParam = docExCon.xpath( '//vco:parameter' ).first.clone
    puts "Parameter clone 1: #{docParam.to_xml}"
    docExCon.xpath('//vco:parameter' ).first.remove
    puts "Parameter clone 1 after deletion: #{docParam.to_xml}"

    params.each do | param | 

        puts "Parameter clone 1 before cloning: #{docParam.to_xml}"
        cloneParam = docParam.clone
        puts "Parameter clone 2: #{cloneParam.to_xml}"

        cloneParam[ 'name' ] = param[ :name ]
        puts "Parameter clone 2: #{cloneParam.to_xml}"
        cloneParam.at( '//vco:string' ).content = param[ :value ]

        puts "Node values: #{cloneParam.at( '//vco:string' ).to_xml}"
        puts "Parameter  : #{cloneParam.to_xml}"

        docExCon.xpath( '//vco:parameters' ).first.add_child( cloneParam )
        puts "docExCon    : #{docExCon.to_xml}"
    end
    return docExCon.to_xml
end

0 个答案:

没有答案