下面代码的目标是获取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