根据本地 dtd 验证 xml 文件
validating an xml file against a local dtd
我正在尝试根据本地 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: undefined method `validate' for nil:NilClass
'document.external_subset' returns 我没有。
任何人都可以就此问题向我提供建议吗?谢谢
require 'nokogiri'
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
the_dtd = Nokogiri::XML::DTD.new('dtd', dtd)
document = Nokogiri::XML(File.open('cookbook.xml'))
p the_dtd.validate(document)
我正在尝试根据本地 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: undefined method `validate' for nil:NilClass
'document.external_subset' returns 我没有。
任何人都可以就此问题向我提供建议吗?谢谢
require 'nokogiri'
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
the_dtd = Nokogiri::XML::DTD.new('dtd', dtd)
document = Nokogiri::XML(File.open('cookbook.xml'))
p the_dtd.validate(document)