使用Nokogiri读取XML文件是否需要根元素?

3

当XML文件没有包含“根”时,我无法读取它。

如果我有一个像这样的文件:

<?xml version="1.0" encoding="utf-8"?>
<a>
<country>US</country>
</a>
<b>
<country>UK</country>
</b>

Nokogiri似乎只读取第一个元素。如果XML文件有根元素,则似乎可以正常工作。我正在使用Nokogiri 1.5.6。
这个有效:
<?xml version="1.0" encoding="utf-8"?>
<root>
<a>
<country>US</country>
</a>
<b>
<country>UK</country>
</b>
</root>

4
XML文件必须有一个单一的根元素。包含多个“根元素”的文件不是有效的XML(准确地说:它不是格式良好的)。您不应该期望XML解析器能够处理此类文件。 - oefe
如果您正在创建此XML,则应将其修复为格式良好。如果您收到格式不正确的XML并需要解析器来处理,那就是另一回事了。我现在简要查看了一下,找不到一个Ruby宽容的解析器,但可能有一个您可以使用,并且这里的某个人可能能够帮助您。 - Neil Slater
我正在使用一个公共的XML数据文件。谢谢你寻找解析器,但我可能会修改XML文件。 - nilanjan
2个回答

6

如果没有根元素,它不是一个完整的XML文档。您可以在解析之前将XML包装在根元素中,或从中创建一个Nokogiri :: XML :: DocumentFragment。例如:

Nokogiri::XML::DocumentFragment.parse(str)

替代:

Nokogiri::XML(str)

理想情况下,您应该修复创建XML的问题。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接