Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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 on rails 非法字符'&';原始字符串中的REXML解析_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 3.2_Rexml - Fatal编程技术网

Ruby on rails 非法字符'&';原始字符串中的REXML解析

Ruby on rails 非法字符'&';原始字符串中的REXML解析,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.2,rexml,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.2,Rexml,您好,我正在尝试使用REXML解析XML文件。。。。当我的XML文件中存在非法字符时,它的JU将在此时失败 那么我们有没有办法替换或删除这些字符呢 无法分析,错误为原始字符串REXML分析中的非法字符“&” <head> Negative test for underlying BJSPRICEENG N4&N5 </head> doc = REXML::Document.new(File.open(file_name,"r:iso-8859-1:utf-8"

您好,我正在尝试使用REXML解析XML文件。。。。当我的XML文件中存在非法字符时,它的JU将在此时失败

那么我们有没有办法替换或删除这些字符呢

无法分析,错误为原始字符串REXML分析中的非法字符“&”

<head> Negative test for underlying BJSPRICEENG N4&N5
</head>


doc = REXML::Document.new(File.open(file_name,"r:iso-8859-1:utf-8"))

testfile.elements["head"].text





doc = REXML::Document.new(content)
dir_path = doc.elements["TestBed/TestDir"].attributes["path"].to_s
    doc.elements.each("TestBed/TestDir") do |directory|
      directory.elements.each("file") do |testfile|

t= testfile.elements["head"].text

end
end
end




<file name="toptstocksensbybjs.m">
      <MCheck></MCheck>
      <TestExtension></TestExtension>
      <TestType></TestType>


<fcn name="lvlTwoDocExample" linenumber="20">
 <head> P1><&
</head>

 </fcn>

   </file>
基础BJSPRICEENG N4和N5的
阴性测试
doc=REXML::Document.new(File.open(文件名,“r:iso-8859-1:utf-8”))
testfile.elements[“head”].text
doc=REXML::Document.new(内容)
目录路径=文档元素[“测试床/TestDir”]。属性[“路径”]。到
doc.elements.each(“TestBed/TestDir”)do |目录|
directory.elements.each(“文件”)do | testfile|
t=testfile.elements[“head”].text
结束
结束
结束

P1>对于您的情况,要删除非法的
&
字符,您可以尝试:

content = File.open(file_name,"r:iso-8859-1:utf-8").read
content.gsub!(/&(?!(?:amp|lt|gt|quot|apos);)/, '&amp;')
doc = REXML::Document.new(content)

但是,对于那些其他非法字符,尤其是那些未配对的
'
,这将困难得多。

@samuil只有这5种XML格式,而不是HTML格式。@ArieShaw您能准确地解释一下这里发生了什么。。。。。只需将&替换为&。。。。。。以及如何处理字符串中的其他字符?@Vinay正则表达式仅检测非法的
&
字符。如果
&
后跟
amp
(&)、
lt;
()、
quot
(”)或
apos,则该
&
是合法的(')。在这里,负前瞻
(?!模式)
将过滤掉那些有效的
&
(a
&
,后面不跟amp;或lt;或…)。请注意,(负)前瞻组是一个零长度预测,它不会使用字符。@Vinay很难或可能无法检测非法的
'
。然而,在某些特殊情况下,这可能是可能的。@ArieShaw非常感谢您的解释:)。。。。但是,我的意思是,在这一步去掉head标记时,是否可能在这一步替换>或<………testfile.elements[“head”].text。。。。。可能正在使用REXML::Text.new(字符串、false、nil、false)?