ruby格式错误的XML:缺少标记开始

pcww981p  于 2022-12-03  发布在  Ruby
关注(0)|答案(3)|浏览(111)

我有一个很奇怪的问题:我在两个xml文件上运行相同的代码,其中第二个是第一个的副本(我复制了内容,可能这是个问题)。代码使用REXML解析xml文件,在第一个文件上一切正常,在第二个文件上出现以下错误:失败:XML格式错误:缺少标记开始行:2个位置:102最后80个未使用的字符:

<t>dede</t>

xml文件的内容是:

<?xml version="1.0" standalone="yes"?>
<t>dede</t>

有什么想法吗?
多谢了

4szc88ey

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"
jhkqcmku

jhkqcmku2#

这是因为文件编码。我有同样的问题,并发现文件是UCS-2编码。无论是UTF-8或ANSI的工作,但UCS-2不,它似乎。它可能需要专门的解析器为这种格式第一。我刚刚转换了xml文件在记事本++测试不同的编码。

jtjikinw

jtjikinw3#

REXML似乎有点急于抛出ParseException。编码绝对是罪魁祸首。请检查文件的编码。

相关问题