ruby - 用 Ruby 替换文件中的文本

标签 ruby xml

我需要读入一个 xml 格式的文件,但所有文件都挤在一行中,我需要解析该行以找到特定的属性并将其值替换为我指定的值。

文件可能包含:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><VerificationPoint type="Screenshot" version="2"><Description/><Verification object=":qP1B11_QLabel" type="PNG">

我需要搜索这一行,找到属性“Verification object=”并将 :qP1B11 替换为我自己的字符串。请注意,如果可能的话,我不想替换字符串的 _QLabel"type="PNG"> 部分。

我不能使用 sub 因为我不重视可能是任何东西的属性,我相信我应该能够使用正则表达式来做到这一点,但我从来没有使用过他们之前和我见过的所有例子都让我比以前更困惑。

如果有人能给我一个优雅的答案(如果使用正则表达式,还有一个解释),那将是一个巨大的帮助!

谢谢

最佳答案

您有 XML,因此请使用 XML 解析器。 Nokogiri 将很快完成这项工作:

doc = Nokogiri::XML(that_string)
doc.search('Verification').each do |node|
    node['object'] = node['object'].sub(/:qP1B11/, 'PANCAKES')
end
new_string = doc.to_xml
# <?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<VerificationPoint type="Screenshot" version="2">\n  <Description/>\n  <Verification object="PANCAKES_QLabel" type="PNG">\n</Verification>\n</VerificationPoint>\n"

您可以使用 to_xml 的选项调整输出格式.

如果你只有一个<Verification>那么你可以这样做:

node = doc.at('Verification')
node['object'] = node['object'].sub(/:qP1B11/, 'PANCAKES')
new_string = doc.to_xml

无论哪种情况,您都需要调整正则表达式和替换项以满足您的需要。

关于ruby - 用 Ruby 替换文件中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7762911/

相关文章:

ruby - 如何循环重启守护进程?

ruby-on-rails - Ruby on Rails 投票更新

java - 迭代 XML 树并从中提取数据的简单方法?

xml - 用于从 XML 文件中删除标签的 XSLT

ruby-on-rails - 使用 ruby​​ 从字符串创建 json 对象

ruby - Rails 3 中的 link_to_remote 和 link_to

ruby - 如何在纯 Ruby 中按 DateTime 的日期数组分组?

xml - 定义必须为空或小数的 XML 元素

android - Activity B 在 Activity A 之前开始

java - 如何在android中将TextView转换成ImageView