【发布时间】:2017-12-15 12:40:05
【问题描述】:
我正在尝试针对本地 dtd 验证 xml 文件。
以下是摘自一本书的示例代码:
dtd = Nokogiri::XML::Document.parse(%{<!ELEMENT rubycookbook (recipe+)>
<!ELEMENT recipe (title?, problem, solution, discussion, seealso?)+>
<!ELEMENT titlexx (#PCDATA)>
<!ELEMENT problem (#PCDATA)>
<!ELEMENT solution (#PCDATA)>
<!ELEMENT discussion (#PCDATA)>
<!ELEMENT seealso (#PCDATA)>})
open('cookbook.xml', 'w') do |f|
f.write %{<?xml version="1.0"?>
<rubycookbook>
<recipe>
<title>A recipe</title>
<problem>A difficult/common problem</problem>
<solution>A smart solution</solution>
<discussion>A deep solution</discussion>
<seealso>Pointers</seealso>
</recipe>
</rubycookbook>
}
end
document = Nokogiri::XML(File.open('cookbook.xml'))
document.external_subset.validate
当我运行下面的命令时,
document.external_subset.validate
我收到以下错误消息:
NoMethodError: nil:NilClass 的未定义方法“验证”
'document.external_subset' 返回零。
有人可以就这个问题给我建议吗?谢谢
【问题讨论】:
-
当然应该是
document.create_external_subset(...); document.validate? -
您从未将该 DTD 与 XML 关联,并且您正在尝试验证 DTD 而不是 XML!
-
我是 Nokogiri 的新手,对方法不熟悉