我有一个很奇怪的问题:我在两个xml文件上运行相同的代码,其中第二个是第一个的副本(我复制了内容,可能这是个问题)。代码使用REXML解析xml文件,在第一个文件上一切正常,在第二个文件上出现以下错误:失败:XML格式错误:缺少标记开始行:2个位置:102最后80个未使用的字符:
<t>dede</t>
xml文件的内容是:
<?xml version="1.0" standalone="yes"?> <t>dede</t>
有什么想法吗?多谢了
4szc88ey1#
我没有任何这样的问题使用这段代码:
require 'rexml/document' doc = REXML::Document.new <<ENDXML <?xml version="1.0" standalone="yes"?> <t>dede</t> ENDXML doc.each_element('//t'){ |e| puts e } #=> <t>dede</t>
你使用的是什么版本的Ruby,你的代码实际上是什么样子的?
Edit:根据您正在使用流解析器的新信息,下面是另一段代码,它也适用于我使用Ruby 1.8.7的情况:
class Listener def method_missing( name, *args ); puts "I don't support '#{name}'"; end def tag_start( name, attrs ); puts "<#{name} #{attrs.inspect}>"; end def text( str ); p str; end def tag_end( name ); puts "</#{name}>"; end end require 'stringio' xml = StringIO.new <<ENDXML <?xml version="1.0" standalone="yes"?> <t>dede</t> ENDXML require 'rexml/document' doc = REXML::Document.parse_stream( xml, Listener.new ) #=> "\t" #=> I don't support 'xmldecl' #=> "\n\t" #=> <t {}> #=> "dede" #=> </t> #=> "\n"
jhkqcmku2#
这是因为文件编码。我有同样的问题,并发现文件是UCS-2编码。无论是UTF-8或ANSI的工作,但UCS-2不,它似乎。它可能需要专门的解析器为这种格式第一。我刚刚转换了xml文件在记事本++测试不同的编码。
jtjikinw3#
REXML似乎有点急于抛出ParseException。编码绝对是罪魁祸首。请检查文件的编码。
3条答案
按热度按时间4szc88ey1#
我没有任何这样的问题使用这段代码:
你使用的是什么版本的Ruby,你的代码实际上是什么样子的?
Edit:根据您正在使用流解析器的新信息,下面是另一段代码,它也适用于我使用Ruby 1.8.7的情况:
jhkqcmku2#
这是因为文件编码。我有同样的问题,并发现文件是UCS-2编码。无论是UTF-8或ANSI的工作,但UCS-2不,它似乎。它可能需要专门的解析器为这种格式第一。我刚刚转换了xml文件在记事本++测试不同的编码。
jtjikinw3#
REXML似乎有点急于抛出ParseException。编码绝对是罪魁祸首。请检查文件的编码。