English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
XML significa Linguagem de Marcação Extensível (eXtensible Markup Language).
Linguagem de marcação extensível, subconjunto do linguagem de marcação geral, uma linguagem de marcação usada para marcar documentos eletrônicos para que tenham estrutura.
Pode ser usado para marcar dados, definir tipos de dados, é uma linguagem de origem que permite que os usuários definam sua própria linguagem de marcação. É muito adequado para a transmissão da web, fornecendo um método uniforme para descrever e trocar dados estruturados independentes de aplicativos ou fornecedores.
Para mais conteúdo, consulte nossa Tutorial de XML
Os analisadores de XML principais são DOM e SAX.
O analisador SAX é baseado no processamento de eventos, é necessário varrer o documento XML de cabeça a pé, durante o processo de varredura, toda vez que encontrar uma estrutura sintática, será chamado o programa de tratamento de eventos dessa estrutura sintática específica, enviando um evento para o aplicativo.
DOM é a análise do modelo de objeto de documento, constrói a estrutura sintática hierárquica do documento, cria uma árvore DOM em memória, os nós da árvore DOM são identificados como objetos, após a análise do documento, toda a árvore DOM do documento será colocada na memória.
A análise de documentos XML no RUBY pode ser feita usando a biblioteca REXML.
A biblioteca REXML é um pacote de XML do ruby, escrita em Ruby puro, que observa a especificação XML.1.0 especificação.
Em Ruby1.8Versão e posteriores, o RUBY padrão incluirá REXML.
O caminho para a biblioteca REXML é: rexml/documento
Todos os métodos e classes são encapsulados em um módulo REXML.
Os pontos fortes do parser REXML em comparação com outros são:
100% escrito em Ruby.
Aplicável a parsers SAX e DOM.
É leve, menos de2000 linhas de código.
Métodos e classes fácilmente compreensíveis.
Baseado em SAX2 Suporte completo para API e XPath.
Instale usando Ruby, sem a necessidade de instalação separada.
A seguir está o código XML de exemplo, salve como movies.xml:
<collection shelf="Novos Chegados"> <movie title="Enemy Behind"> <type>Guerra, Thriller</type> <format>DVD</format> <year>2003</year> <rating>PG</rating> <stars>10</stars> <description>Falar sobre um EUA-Guerra japonesa</description> </movie> <movie title="Transformers"> <type>Anime, Science Fiction</type> <format>DVD</format> <year>1989</year> <rating>R</rating> <stars>8</stars> <description>A schientific fiction</description> </movie> <movie title="Trigun"> <type>Anime, Action</type> <format>DVD</format> <episodes>4</episodes> <rating>PG</rating> <stars>10</stars> <description>Vash the Stampede!</description> </movie> <movie title="Ishtar"> <type>Comedy</type> <format>VHS</format> <rating>PG</rating> <stars>2</stars> <description>Viewable boredom</description> </movie> </coleção>
Vamos primeiro analisar os dados XML, antes de tudo precisamos importar o rexml/Biblioteca de documento, geralmente podemos importar o REXML no espaço de nomes superior:
#!/usr/bin/ruby -w require 'rexml'/documento include REXML xmlfile = File.new("movies.xml") xmldoc = Document.new(xmlfile) # Obter o elemento root root = xmldoc.root puts "Elemento raiz: " + root.attributes["shelf"] root.attributes["shelf"] xmldoc.elements.each("collection"/# A seguir, será impresso o título do filme movie"){ + |e| puts "Título do Filme: " } e.attributes["title"] xmldoc.elements.each("collection"/movie/# A seguir, será impressa todos os tipos de filmes |e| puts "Tipo de Filme: " + e.text } # A seguir, será impressa todas as descrições de filmes xmldoc.elements.each("collection"/movie/description) { |e| puts "Descrição do Filme: " + e.text }
O resultado da saída do exemplo acima é:
Elemento raiz: Novos Chegadas Título do Filme: Enemy Behind Título do Filme: Transformers Título do Filme: Trigun Título do Filme: Ishtar Tipo de Filme: Guerra, Thriller Tipo de Filme: Anime, Ficção Científica Tipo de Filme: Anime, Ação Tipo de Filme: Comédia Descrição do Filme: Fale sobre um EUA-Guerra do Japão Descrição do Filme: Uma ficção científica Descrição do Filme: Vash the Stampede! Descrição do Filme: Boredom visível SAX-como Parsing:
Tratar o mesmo arquivo de dados: movies.xml, não é recomendável a análise SAX para um arquivo pequeno, aqui está um exemplo simples:
#!/usr/bin/ruby -w require 'rexml'/documento require 'rexml'/streamlistener' include REXML class MyListener include REXML::StreamListener def tag_start(*args) puts "tag_start: #{args.map {|x| x.inspect}.join(', ')}" fim def text(data) return if data =~ /^\w*$/ # apenas espaço em branco abbrev = data[0..40] + (data.length > 40 ? "..." : "") puts " text : #{abbrev.inspect}" fim fim list = MyListener.new xmlfile = File.new("movies.xml") Document.parse_stream(xmlfile, list)
O resultado da saída acima é:
tag_start: "collection", {"shelf"=>"Novos Chegados"} tag_start: "movie", {"title"=>"Inimigo Atrás"} tag_start: "type", {} text : "Guerra, Thriller" tag_start: "format", {} tag_start: "year", {} tag_start: "rating", {} tag_start: "stars", {} tag_start: "description", {} text : "Fale sobre uma guerra dos EUA-Guerra do Japão" tag_start: "movie", {"title"=>"Transformers"} tag_start: "type", {} text : "Anime, Ficção Científica" tag_start: "format", {} tag_start: "year", {} tag_start: "rating", {} tag_start: "stars", {} tag_start: "description", {} text : "Uma ficção científica" tag_start: "movie", {"title"=>"Trigun"} tag_start: "type", {} text : "Anime, Ação" tag_start: "format", {} tag_start: "episodes", {} tag_start: "rating", {} tag_start: "stars", {} tag_start: "description", {} text : "Vash the Stampede!" tag_start: "movie", {"title"=>"Ishtar"} tag_start: "type", {} tag_start: "format", {} tag_start: "rating", {} tag_start: "stars", {} tag_start: "description", {} text : "Visualmente monótono"
Podemos usar XPath para visualizar XML, XPath é uma linguagem usada para encontrar informações em documentos XML (ver:Tutorial de XPath)。
XPath é a linguagem de caminho XML, uma linguagem usada para determinar a posição de uma parte de um documento XML (subconjunto do linguagem de marcação de documentos padrão). XPath está baseado na estrutura em árvore do XML, fornecendo a capacidade de encontrar nós em uma estrutura de dados em árvore.
O Ruby suporta XPath através da classe REXML, que é uma análise baseada em árvore (Modelo de Objetos de Documento).
#!/usr/bin/ruby -w require 'rexml'/documento include REXML xmlfile = File.new("movies.xml") xmldoc = Document.new(xmlfile) # Informações do primeiro filme movie = XPath.first(xmldoc, ""//movie) p movie # Imprime todos os tipos de filmes XPath.each(xmldoc, ""//type) { |e| puts e.text } # Obtém todos os tipos de formatos de filmes, retorna um array names = XPath.match(xmldoc, ""//format).map { |x| x.text } p names
O resultado da saída do exemplo acima é:
<movie title='Inimigo por Trás'> ... </> Guerra, Thriller Anime, Ficção Científica Anime, Ação Comédia ["DVD", "DVD", "DVD", "VHS"]
Existem dois analisadores XSLT no Ruby, aqui está uma descrição breve:
Este analisador é escrito e mantido por Masayoshi Takahashi. Ele é principalmente escrito para o sistema operacional Linux e requer as seguintes bibliotecas:
Sablot
Iconv
Expat
Você pode encontrar Ruby-Sablotron Encontre essas bibliotecas.
XSLT4O R foi escrito por Michael Neumann. XSLT4O R é usado para interação de linha de comando simples e pode ser usado por aplicações de terceiros para converter documentos XML.
XSLT4O R necessita da operação XMLScan, que inclui XSLT4Arquivo R, que é um100% dos módulos do Ruby. Esses módulos podem ser instalados usando o método de instalação padrão do Ruby (ou seja, Ruby install.rb).
XSLT4O formato de sintaxe do R é o seguinte:
ruby xslt.rb stylesheet.xsl document.xml [argumentos]
Se você quiser usar XSLT em seu aplicativo4R, você pode introduzir XSLT e fornecer os parâmetros necessários. Veja o exemplo a seguir:
require "xslt" stylesheet = File.readlines("stylesheet.xsl").to_s xml_doc = File.readlines("document.xml").to_s arguments = { 'image_dir' => '/....' } sheet = XSLT::Stylesheet.new( stylesheet, arguments ) # output to StdOut sheet.apply( xml_doc ) # output to 'str' str = "" sheet.output = [ str ] sheet.apply( xml_doc )
Analisador REXML completo, consulte o documento Documentação do Analisador REXML。
Você pode baixar de Biblioteca de Conhecimento RAA Baixar XSLT4R 。