1

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

<t>dede</t> 

xml文件的内容是:

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

有任何想法吗?

非常感谢

4

3 回答 3

1

使用此代码我没有任何此类问题:

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,您的代码实际上是什么样的?

编辑:根据您使用流解析器的新信息,这里有另一段代码也适用于我使用 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"
于 2011-01-07T01:57:34.727 回答
1

这是因为文件编码。我有同样的问题,发现文件是 UCS-2 编码的。UTF-8 或 ANSI 都可以,但 UCS-2 似乎不行。它可能首先需要针对这种格式的专门解析器。我刚刚在 Notepad++ 中转换了 xml 文件来测试不同的编码。

于 2011-03-11T09:13:28.593 回答
0

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

于 2012-07-27T15:15:24.927 回答