Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Ruby替换文件中的文本_Ruby_Xml - Fatal编程技术网

用Ruby替换文件中的文本

用Ruby替换文件中的文本,ruby,xml,Ruby,Xml,我需要读入一个xml格式的文件,但都塞进了一行,我需要解析该行以找到一个特定的属性,并用我指定的内容替换它的值 该文件可能包含: <?xml version="1.0" encoding="UTF-8" standalone="no"?><VerificationPoint type="Screenshot" version="2"><Description/><Verification object=":qP1B11_QLabel" type="PNG

我需要读入一个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。请注意,如果可能的话,我不想替换字符串的
\u QLabel“type=“PNG”>
部分

我不能使用sub,因为我不知道属性的值,它可以是任何东西,我相信我应该可以用正则表达式来实现这一点,但我以前从未使用过它们,我看到的所有例子都让我比以前更困惑

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


谢谢

您有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"

在任何一种情况下,您都需要调整您的正则表达式和替换项以满足您的需要。

您有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"

在这两种情况下,您都需要调整正则表达式和替换项以满足您的需要。

这不是答案,但请不要忘记:解析XML是一个已解决的问题。如果您可以找到属性“object”,您可以使用split(“”)根据其值获取要替换的字符串?这会为您提供所需内容吗?这不是答案,但让我们不要忘记:解析XML是一个已解决的问题。如果您可以找到属性“object”,您可以使用其值上的split(“”)来获取要替换的字符串吗?这会为您提供所需内容吗?