Ruby XML处理器如何处理未解析的实体?
根据我到目前为止所做的研究,外部未解析的XML实体用于引用不一定是XML的数据。这提供了一种传输非XML数据的方法。因此,未解析的实体仅在实体属性中取消引用,因为取消引用的值将不符合XML文档的结构 这一切都是有道理的,但我不知道何时/什么时候取消引用实体定义中声明的目标文件。XML解析器本身是否访问目标文件、提取数据,然后将其放入XML文档中?或者客户端(即XML文档的使用者)是否访问数据并相应地对其进行操作 诚然,问题可能是我使用的XML处理器(Ruby XML处理器如何处理未解析的实体?,ruby,xml,nokogiri,Ruby,Xml,Nokogiri,根据我到目前为止所做的研究,外部未解析的XML实体用于引用不一定是XML的数据。这提供了一种传输非XML数据的方法。因此,未解析的实体仅在实体属性中取消引用,因为取消引用的值将不符合XML文档的结构 这一切都是有道理的,但我不知道何时/什么时候取消引用实体定义中声明的目标文件。XML解析器本身是否访问目标文件、提取数据,然后将其放入XML文档中?或者客户端(即XML文档的使用者)是否访问数据并相应地对其进行操作 诚然,问题可能是我使用的XML处理器(Nokogiri::Version#=>“1.
Nokogiri::Version#=>“1.6.8.1”
)配置不正确,但解析的外部实体被成功取消引用
下面是一些代码来支持我的问题:
托管的外部DTD文件@
XML文件
&任意文本;
诺科吉里产量
一些文本
我想我还是在这一点上张贴我粗糙的马具为好:
Ruby代码
#/usr/bin/ruby
需要“nokogiri”
def打印错误(文档)
如果文档出错!=[]
ban=“警告:检测到分析错误”
放
放置“-”*ban.bytesize
禁止
放置“-”*ban.bytesize
放置文档错误
放置“-”*ban.bytesize
放
结束
结束
#XML解析器选项(Nokogiri选项)
options=Nokogiri::XML::ParseOptions.new()
选项。恢复
options.dtdload
选项1.noent
options.noblanks
options.dtdvalid#取消注释以强制DTD验证
#外部DTD示例
外部dtd=%`
&任意文本;
`
doc=Nokogiri::XML(ext_dtd,nil,nil,options)
打印错误(文档)
放博士
打印错误(文档)
<!ELEMENT rootsies ANY>
<!ELEMENT arbitrary ANY>
<!ELEMENT viewer EMPTY>
<!ATTLIST viewer source ENTITY #REQUIRED>
<!ENTITY gif_source SYSTEM "file:///var/www/html/some.gif" NDATA gif>
<!NOTATION gif SYSTEM "text viewer">
<!ENTITY arbitrary_text "some text">
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE rootsies SYSTEM "http://127.0.0.1:81/some.dtd">
<rootsies>
<viewer source="gif_source"/>
<arbitrary>&arbitrary_text;</arbitrary>
</rootsies>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE rootsies SYSTEM "http://127.0.0.1:81/some.dtd">
<rootsies>
<viewer source="gif_source"/>
<arbitrary>some text</arbitrary>
</rootsies>
#!/usr/bin/ruby
require 'nokogiri'
def print_errors(doc)
if doc.errors != []
ban = "Warning: Parse errors detected"
puts
puts "-" * ban.bytesize
puts ban
puts "-" * ban.bytesize
puts doc.errors
puts "-" * ban.bytesize
puts
end
end
# XML Parser Options (Nokogiri Options)
options = Nokogiri::XML::ParseOptions.new()
options.recover
options.dtdload
options.noent
options.noblanks
options.dtdvalid # Uncomment to enforce DTD validation
# External DTD Example
ext_dtd = %`<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE rootsies SYSTEM "http://127.0.0.1:81/some.dtd">
<rootsies>
<viewer source="gif_source"/>
<arbitrary>&arbitrary_text;</arbitrary>
</rootsies>`
doc = Nokogiri::XML(ext_dtd, nil, nil, options)
print_errors(doc)
puts doc
print_errors(doc)