我有一个包含多个连接XML文件的文件,如下所示:
<?xml version ... ?>
<!DOCTYPE ... >
...
<?xml version ... ?>
<!DOCTYPE ... >
...
<?xml version ... ?>
<!DOCTYPE ... >
...
有没有办法按原样解析文件,使用Nokogiri,而不是将文件切片?
答案 0 :(得分:3)
您需要将其分成单个文档,但这很容易。
Ruby的String.split
方法让它变得简单。例如,如果变量foo
包含文本,那么foo.split("<?xml version ... ?>\n")
将返回一个可以循环的数组:
foo.split("<?xml version ... ?>\n")
[
[0] "",
[1] "<!DOCTYPE ... >\n...\n",
[2] "<!DOCTYPE ... >\n...\n",
[3] "<!DOCTYPE ... >\n..."
]
解析每个块,你就会在路上。您可能需要预先添加XML DECL语句以使Nokogiri满意,但我认为如果没有它,它就会好起来。
答案 1 :(得分:0)
这不是一个有效的XML文件,因此您无法一次性解析它。但是您可以创建一个继承自File的类,并且当您到达每个XML文档的末尾时,它具有返回文件结尾的智能。有了它,您应该能够打开一次文件,但仍然可以多次调用XML解析器。
如果XML片段不是很大,最好将片段随时粘贴到字符串变量中(可能使用regexp),并解析它。