如何将文件转换为Nokogiri :: XML对象?

时间:2016-10-14 14:27:59

标签: ruby xml nokogiri

我有一个示例XML文件(为了这个问题,我们称之为example.xml),并希望将其转换为Nokogiri对象。

根据文档和许多其他在线资源,这应该有效:

xml = Nokogiri::XML(File.read("example.txt"))

xml.to_xml的价值仅为:

"<?xml version=\"1.0\"?>\n"

换句话说,它忽略了文件的其余部分。之后有许多标签,它们都不在xml对象中。

如何让Nokogiri获得所有标签?

这是我正在使用的XML:

<? xml version="1.0" encoding="UTF-8" ?>
<Document>
    <Test>Test</Test>
</Document>

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试解析无效的XML文档。

这可以通过删除XML声明中的空格来解决:

<?xml version="1.0" encoding="UTF-8"?>
<Document>
    <Test>Test</Test>
</Document>

我怎么想出来

默认情况下,当Nokogiri在解析文档时出错时,会填充errors数组。

xml = Nokogiri::XML(File.read("example.txt"))
p xml.errors
# => [#<Nokogiri::XML::SyntaxError: xmlParsePI : no target name>, #<Nokogiri::XML::SyntaxError: Start tag expected, '<' not found>]

你也可以配置Nokogiri来引发它有解析错误的例外:

xml = Nokogiri::XML(File.read("example.txt")) do |config|
  config.strict
end

这两种情况都表明解析文档存在问题