парсинг XSD с рубином - PullRequest
       1

парсинг XSD с рубином

1 голос
/ 21 октября 2010

Привет, у меня есть XSD, который я хочу проанализировать.Обратите внимание, что я не хочу проверять его на соответствие XML, но получаю все перечисления, которые у меня есть.Например,

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <xsd:simpleType name="fruitNames">
  <xsd:restriction base="xsd:string">
  <xsd:enumeration value="banana" />
  <xsd:enumeration value="apple" />
  <xsd:enumeration value="orange" />
  <xsd:enumeration value="mango" />
 </xsd:restriction>
</xsd:simpleType>
</xsd:schema>

Я хочу извлечь значения перечисления .. Есть идеи?Я пытался играть с XSD :: Schema, но безуспешно ..

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

Пример кода:

require 'rexml/document'

doc = REXML::Document.new(DATA.read)

REXML::XPath.each(doc, '//xsd:simpleType[@name="fruitNames"]//xsd:enumeration/@value') do |e|
  puts e.value
end

__END__
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <xsd:simpleType name="fruitNames">
  <xsd:restriction base="xsd:string">
  <xsd:enumeration value="banana" />
  <xsd:enumeration value="apple" />
  <xsd:enumeration value="orange" />
  <xsd:enumeration value="mango" />
 </xsd:restriction>
</xsd:simpleType>
</xsd:schema>
2 голосов
/ 21 октября 2010

XSD - это просто разновидность XML, поэтому вы можете использовать REXML, например:

require 'rexml/document'
doc = REXML::Document.new(File.new('yourfile.xsd'))
values = doc.elements.to_a('//xsd:enumeration').map { |el| el.attributes['value'] }
=> ["banana", "apple", "orange", "mango"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...