【问题标题】:Ruby edit and save XML fileRuby 编辑和保存 XML 文件
【发布时间】:2023-03-28 08:30:02
【问题描述】:

我已经编写了一些代码来转换音频文件的名称(在此示例中将“XX”附加到名称中)。该代码正在运行,但我找不到将其保存为新 xml 文件的方法。我确实尝试了我在论坛上找到的所有解决方案,但仍然无法正常工作;(

这是我的 xml 文件的一部分:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xmeml>
<xmeml version="4">
  <sequence authoringapp="Storyboard Pro" 
   projectpath="/Users/rougnaux/Desktop/XML_TEST/man_142_test/man_142_test.sboard" 
    id="man_142_test">
    <media>
     <audio>
        <track>
          <clipitem id="MAN_142_RADIOPLAY - SCRATCH_ESCAPING THE MANOR_20200929">  
            <file id="MAN_142_RADIOPLAY - SCRATCH_ESCAPING THE MANOR_20200929 1">
              <name>MAN_142_RADIOPLAY - SCRATCH_ESCAPING THE MANOR_20200929.wav</name>
            </file>
          </clipitem>
        </track>     
      </audio>
    </media>
    <ismasterclip>FALSE</ismasterclip>
  </sequence>
</xmeml>

这是我的代码:

require 'nokogiri'

file = File.read('man_142_test.xml')


document  = Nokogiri::XML(file)

document.xpath(("//sequence/media/audio/track/clipitem/file/name")).map {|name| 
 name.children.text }.map!{ |name| 'XX'+name}


File.open("new_test.xml", "w") do |f|
  f.write document.to_xml
end

当我使用 puts 文档签入 irb 时,我有这个输出 [“XXMAN_142_RADIOPLAY - SCRATCH_ESCAPING THE MANOR_20200929.wav”,“XXchimes 02_1.mp3”] 在“new_test.xml”文件中,音轨的名称没有改变。这里缺少什么?!

【问题讨论】:

    标签: ruby xml save edit


    【解决方案1】:

    试试下面的:

    require 'nokogiri'
    file = File.read('man_142_test.xml')
    document = Nokogiri::XML(file)
    document.xpath(("//sequence/media/audio/track/clipitem/file/name")).map do |name|
      name.content = 'XX' + name
    end
    
    File.open("new_test.xml", "w") do |f|
      f.write document.to_xml
    end
    

    【讨论】:

    • 您好,@user11350468,我的“new_test.xml”保持不变。现在文档的输出是:#]>, #<:xml::element:0x3fdc920adaf8 name="name" children="[#<Nokogiri::XML::Text:0x3fdc920ad580">]>]:map>跨度>
    【解决方案2】:

    对于那些面临同样问题的人,这里是解决方法:

    require 'nokogiri'
    
    file = File.read('man_142_test.xml')
    document = Nokogiri::XML(file)
    document.search("//sequence/media/audio/track/clipitem/file/name").each do |node|
      node.content = "XX_#{node.content}"
    end
    
    
    File.open("new_test.xml", "w") do |f|
      f.write document.to_xml
    end
    

    我认为 xpath 和 map 是修改 xml 的错误方法,尽管我还不明白为什么我在很多关于编辑 xml 的解决方案中看到它们。如果有人可以提供更多详细信息,我认为它可以帮助很多像我这样的人!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多