如果我们看一下 XML 1.0 规范,我们会看到开始标记如下所示:
[40] STag ::= '<' Name (S Attribute)* S? '>'
然后在其他地方,我们找到的定义Name
:
[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
你会注意到-
不是NameStartChar
这样:
<-vikings->1336162202</-vikings->
不是有效的 XML 和这部分代码:
hash = Hash.from_xml(file.read)
失败是因为您的文件不包含 XML,它包含看起来像 XML 但不是真正的 XML 的文本。
修复您的data/mconvert.xml
文件以包含真正的 XML,然后重试。
如果您在 Rails 控制台中尝试一个简单的实验,您会看到发生了什么:
> Hash.from_xml('<-vikings->1336162202</-vikings->')
REXML::ParseException: #<REXML::ParseException: malformed XML: missing tag start
Line: 1
Position: 33
Last 80 unconsumed characters:
<-vikings->1336162202</-vikings->>
注意到“格式错误的 XML:缺少标签开始”吗?