Как я проверяю XML через, ОСЛАБЛЯЮТ NG в Ruby?

Это сработало для меня.

 #sample_1>thead>tr>th.sorting, #sample_1>thead>tr>th.sorting_asc, #sample_1>thead>tr>th.sorting_desc {
        background : none;

    }
    #sample_1>thead>tr>th.sorting:after, #sample_1>thead>tr>th.sorting_asc:after, #sample_1>thead>tr>th.sorting_desc::after {
        content: none; 
    }
7
задан cdleary 27 May 2009 в 00:51
поделиться

2 ответа

Ну, я создал программу, но результаты не очень хороши.

Мои выводы таковы:

  1. синтаксический анализ схемы rexml relaxng, вероятно, не работает. код отмечает, что он неполный
  2. rexml pull parsing, вероятно, работает, но трудно сказать
  3. оба вышеперечисленного недокументированы
  4. , вам следует использовать настоящую библиотеку XML, такую ​​как libxml

Вот моя тестовая программа: test.rb

require 'rexml/validation/relaxng.rb'
require 'rexml/parsers/pullparser.rb'

# USAGE: ruby test.rb XML-FILE
xml = ARGV[0]

# schema must be a Relax NG XML (NOT compact / .rnc)
schema = File.new( "example.rng" )
validator = REXML::Validation::RelaxNG.new( schema )

# The structure the validator made, which should be a complex structure but isn't
validator.dump

xmlfile = File.new( xml )
parser = REXML::Parsers::PullParser.new( xmlfile )
while parser.has_next?
  # Returns an PullEvent
  e = parser.pull
  # puts "Event ", e.inspect
  validator.validate(e)
end

и я сделал несколько игрушечных примеров XML-файлов и файлов RNG, а затем опробовал их на OSX 10.5.x (длинная строка прервана, чтобы сделать ее читабельной):

$ /usr/bin/ruby test.rb good.xml 
< S.1 #{doc}, :end_document(  ) >
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rexml/
  validation/validation.rb:24:in `validate': Validation error.  Expected:
  :start_element( doc ) from < S.1 #:start_element( doc ), {head}, {body},
  :end_element(  ), :end_document(  ) >  but got "doc"(  )
  (REXML::Validation::ValidationException)
        from test.rb:20

(Я получаю то же самое с 1.9)

Итак, в значительной степени сбой.

(Я мог бы еще немного оптимизировать тестовую программу, чтобы использовать add_listener, но это не так » кажется стоящим)

6
ответ дан 6 December 2019 в 21:18
поделиться

Я добился успеха с Nokogiri (после перехода с драгоценного камня libxml-ruby , так как он имеет ошибку 'ed каждый раз с v1.1.3, хотя в журнале изменений говорится, что некоторые проблемы с ошибкой Windows были решены).

Вот код, который я использую:

Во-первых, установите Nokogiri, посмотрите руководство по установке , если у вас возникнут проблемы.

gem install nokogiri

Если вы работаете на Rails, настройте гем в вашем «Rails.root / config / enviroment.rb », например:

config.gem 'nokogiri'

И наоборот, просто требуется «nokogiri , если запуск Ruby.

Чтобы проверить XML-документ на основе предопределенной схемы RelaxNG (мы предположим, что файлы хранятся в 'public' ), используйте этот фрагмент:

schema_path = "public/mySchema.rng"    # Or any valid path to a .RNG File
doc_path    = "public/myInstance.xml"  # Or any valid path to a .XML File

schema = Nokogiri::XML::RelaxNG(File.open(schema_path))

instance = Nokogiri::XML(File.open(doc_path))
errors = schema.validate(instance)

is_valid = errors.empty?

Надеюсь, это поможет !

6
ответ дан 6 December 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: