我有一个示例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>
您似乎正在尝试解析一个无效的XML文档。
这可以通过删除XML声明中的空格来修复:
<?xml version="1.0" encoding="UTF-8"?>
<Document>
<Test>Test</Test>
</Document>
How I figure this out
默认情况下,当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
这两种情况都表明解析文档存在问题