Rake任务以不同于我期望的方式更新目标

时间:2014-04-11 14:33:27

标签: ruby rake-task rakefile rexml

我有一个xml文件,我正在尝试通过rake任务进行更新。以下是xml和rake文件:

的test.xml

<root>
 <parent name='foo'>
  <child value=''/>
 </parent>
 <parent name='bar'>
  <child value=''/>
 </parent>
</root>

rakefile.rb

require 'rexml/document'

task :configure do

 xmlFilePath = "test.xml"
 xmlFile = File.new(xmlFilePath)
 xmlDoc = REXML::Document.new xmlFile

 xmlDoc.root.elements.each("//parent[contains(@name, 'foo')]"){
  |e| e.elements["//child"].attributes["value"] = "child of foo"
 }
 xmlDoc.root.elements.each("//parent[contains(@name, 'bar')]"){
  |e| e.elements["//child"].attributes["value"] = "child of bar"
 }

 xmlFile.close() 
 newXmlFile = File.new(xmlFilePath, "w")
 xmlDoc.write(newXmlFile) 
 newXmlFile.close()

end

运行此脚本后,我期待这个xml:

<root>
 <parent name='foo'>
  <child value='child of foo'/>
 </parent>
 <parent name='bar'>
  <child value='child of bar'/>
 </parent>
</root>

但我得到了这个:

<root>
 <parent name='foo'>
  <child value='child of bar'/>
 </parent>
 <parent name='bar'>
  <child value=''/>
 </parent>
</root>

有什么原因吗?任何帮助将不胜感激。


更新:我可以通过替换元素迭代代码来更新属性值

 xmlDoc.root.elements.each("//parent[contains(@name, 'foo')]"){
  |e| e.elements["//child"].attributes["value"] = "child of foo"
 }
 xmlDoc.root.elements.each("//parent[contains(@name, 'bar')]"){
  |e| e.elements["//child"].attributes["value"] = "child of bar"
 }

以下

xmlDoc.root.elements["//parent[contains(@name, 'foo')]/child"].attributes["value"] = "child of foo"
xmlDoc.root.elements["//parent[contains(@name, 'bar')]/child"].attributes["value"] = "child of bar"

但我仍然不知道为什么迭代代码不起作用。

0 个答案:

没有答案