Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用Nokogiri进行模式验证_Ruby_Xsd_Nokogiri - Fatal编程技术网

Ruby 使用Nokogiri进行模式验证

Ruby 使用Nokogiri进行模式验证,ruby,xsd,nokogiri,Ruby,Xsd,Nokogiri,我试图使用Nokogiri根据十几个模式验证XML文档。目前,我有一个根模式文档,可以导入所有其他模式,并对此进行验证 我是否可以从XML文件本身指向每个模式文件,并让Nokogiri在XML文件中查找要验证的模式 引用用于验证XML文件的多个模式的正确方法是使用以下属性: <?xml version="1.0"?> <foo xmlns="http://bar.com/foo" xmlns:bz="http://biz.biz/" xmlns:xsi="h

我试图使用Nokogiri根据十几个模式验证XML文档。目前,我有一个根模式文档,可以导入所有其他模式,并对此进行验证


我是否可以从XML文件本身指向每个模式文件,并让Nokogiri在XML文件中查找要验证的模式

引用用于验证XML文件的多个模式的正确方法是使用以下属性:

<?xml version="1.0"?>
<foo xmlns="http://bar.com/foo"
     xmlns:bz="http://biz.biz/"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://bar.com/foo http://www.bar.com/schemas/foo.xsd
                         http://biz.biz/ http://biz.biz/xml/ns/bz.xsd">

免责声明:我以前从未尝试使用Nokogiri验证使用多个名称空间模式的单个XML文档。因此,我没有直接的经验来保证上述验证会起作用。验证代码完全基于。

@jkjustjoshing此答案对您没有帮助或解决您的问题吗?我刚刚意识到我从未接受过您的答案。终于做到了!不得不调整这个
doc.root['xsi:schemaLocation']
require 'nokogiri'
require 'open-uri'

doc = Nokogiri.XML( my_xml )
schemata_by_ns = Hash[ doc.root['schemaLocation'].scan(/(\S+)\s+(\S+)/) ]
schemata_by_ns.each do |ns,xsd_uri|
  xsd = Nokogiri::XML.Schema(open(xsd_uri))
  xsd.validate(doc).each do |error|
    puts error.message
  end
end