我需要读入一个 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/