如何将文件变成 Nokogiri::XML 对象?
How to turn a file into a Nokogiri::XML object?
我有一个示例 XML 文件(为了这个问题,我们称它为 example.xml
)并想将它变成一个 Nokogiri 对象。
根据文档和许多其他在线资源,这应该有效:
xml = Nokogiri::XML(File.read("example.txt"))
但是xml.to_xml
的值只有:
"<?xml version=\"1.0\"?>\n"
换句话说,它忽略了文件的其余部分。之后有很多标签,其中 none 个在 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>
我是怎么想出来的
默认情况下,当 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
这两种情况都表明解析文档时出现问题
我有一个示例 XML 文件(为了这个问题,我们称它为 example.xml
)并想将它变成一个 Nokogiri 对象。
根据文档和许多其他在线资源,这应该有效:
xml = Nokogiri::XML(File.read("example.txt"))
但是xml.to_xml
的值只有:
"<?xml version=\"1.0\"?>\n"
换句话说,它忽略了文件的其余部分。之后有很多标签,其中 none 个在 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>
我是怎么想出来的
默认情况下,当 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
这两种情况都表明解析文档时出现问题