ルビーXML、XSLTとXPathのチュートリアル2024 年の最新の入門チュートリアル。このコースでは XMLとは何ですか?,XMLパーサーとAPIの構造,Rubyは解析およびXMLを作成します,DOMパーサ,SAXパーサー,XPathとルビー,XSLTとRuby,さらに詳しい情報, について学習できます。
これは、拡張マークアップ言語XML(拡張マークアップ言語)を意味します。
拡張マークアップ言語、標準一般化マークアップ言語は、構造化マークアップ言語を持っている電子文書をマーキングするための方法のサブセット。
これは、データ型を定義する、データをタグ付けするために使用することができ、ユーザーが自分のマークアップ言語のソース言語を定義することを可能にする技術です。 これは、記述し、構造化データのアプリケーションやベンダーに依存しない交換に統一されたアプローチを提供し、ウェブの伝送に最適です。
詳細については、私たちを参照してくださいXMLのチュートリアルを
XMLパーサSAXとDOMは、主に2種類あります。
XML文書のRUBYの解析は、このライブラリREXMLライブラリを使用することができます。
REXMLライブラリーは、XMLツールキットのルビーは、純粋なRuby言語を使用XML1.0の規範に従うことです。
ruby1.8の以降のバージョンでは、ライブラリはRUBY REXMLが含まれます。
パスREXMLライブラリです:REXML /ドキュメント
すべてのメソッドとクラスはREXMLモジュールにパッケージ化されています。
REXMLパーサは、他のパーサに比べて次のような利点があります。
以下は、movies.xmlとして保存し、XMLコードの例です。
<collection shelf="New Arrivals"> <movie title="Enemy Behind"> <type>War, Thriller</type> <format>DVD</format> <year>2003</year> <rating>PG</rating> <stars>10</stars> <description>Talk about a US-Japan war</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> </collection>
まず、我々はREXML /ドキュメントライブラリを導入し、私たちは通常、導入トップレベルの名前空間REXMLであることができるXMLデータを解析するために開始してみましょう:
#!/usr/bin/ruby -w require 'rexml/document' include REXML xmlfile = File.new("movies.xml") xmldoc = Document.new(xmlfile) # 获取 root 元素 root = xmldoc.root puts "Root element : " + root.attributes["shelf"] # 以下将输出电影标题 xmldoc.elements.each("collection/movie"){ |e| puts "Movie Title : " + e.attributes["title"] } # 以下将输出所有电影类型 xmldoc.elements.each("collection/movie/type") { |e| puts "Movie Type : " + e.text } # 以下将输出所有电影描述 xmldoc.elements.each("collection/movie/description") { |e| puts "Movie Description : " + e.text }
上の例の出力は、次のとおりです。
Root element : New Arrivals Movie Title : Enemy Behind Movie Title : Transformers Movie Title : Trigun Movie Title : Ishtar Movie Type : War, Thriller Movie Type : Anime, Science Fiction Movie Type : Anime, Action Movie Type : Comedy Movie Description : Talk about a US-Japan war Movie Description : A schientific fiction Movie Description : Vash the Stampede! Movie Description : Viewable boredom SAX-like Parsing:
同じデータファイル処理:movies.xmlを、SAX解析は小さなファイルとして推奨されていない、次は簡単な例を示します。
#!/usr/bin/ruby -w require 'rexml/document' require 'rexml/streamlistener' include REXML class MyListener include REXML::StreamListener def tag_start(*args) puts "tag_start: #{args.map {|x| x.inspect}.join(', ')}" end def text(data) return if data =~ /^\w*$/ # whitespace only abbrev = data[0ja40] + (data.length > 40 ? "ja." : "") puts " text : #{abbrev.inspect}" end end list = MyListener.new xmlfile = File.new("movies.xml") Document.parse_stream(xmlfile, list)
出力は、上記。
tag_start: "collection", {"shelf"=>"New Arrivals"} tag_start: "movie", {"title"=>"Enemy Behind"} tag_start: "type", {} text : "War, Thriller" tag_start: "format", {} tag_start: "year", {} tag_start: "rating", {} tag_start: "stars", {} tag_start: "description", {} text : "Talk about a US-Japan war" tag_start: "movie", {"title"=>"Transformers"} tag_start: "type", {} text : "Anime, Science Fiction" tag_start: "format", {} tag_start: "year", {} tag_start: "rating", {} tag_start: "stars", {} tag_start: "description", {} text : "A schientific fiction" tag_start: "movie", {"title"=>"Trigun"} tag_start: "type", {} text : "Anime, Action" 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 : "Viewable boredom"
我々は(:参照情報はXML言語で文書です見つけるために、XMLを表示するには、XPathをXPathを使用することができますXPathのチュートリアル )。
XPathは、XMLパス言語であり、それは、XML(標準一般化マークアップ言語のサブセット)の言語の場所の部分を決定するために使用される方法です。 XPathベースのXMLツリー、ツリー内のデータ構造のノードで検索する機能を提供します。
分析(Document Object Model)ツリーに基づいていますREXMLクラスによるRubyのXPathのサポートのXPath。
#!/usr/bin/ruby -w require 'rexml/document' include REXML xmlfile = File.new("movies.xml") xmldoc = Document.new(xmlfile) # 第一个电影的信息 movie = XPath.first(xmldoc, "//movie") p movie # 打印所有电影类型 XPath.each(xmldoc, "//type") { |e| puts e.text } # 获取所有电影格式的类型,返回数组 names = XPath.match(xmldoc, "//format").map {|x| x.text } p names
上の例の出力は、次のとおりです。
<movie title='Enemy Behind'> ja. </> War, Thriller Anime, Science Fiction Anime, Action Comedy ["DVD", "DVD", "DVD", "VHS"]
Rubyは2 XSLTパーサを持って、簡単な説明を以下に示します:
このパーサは、正義正義Takahashによって書かれ、維持されています。 これは主に、Linuxオペレーティングシステム用に書かれている、あなたは以下のライブラリが必要です:
あなたがすることができますルビー-よるSablotronは、これらのライブラリを見つけます。
XSLT4Rは100%RubyのモジュールであるXSLT4Rアーカイブを含め、XMLScan操作を必要としています。 これらのモジュールは、標準のRubyのインストール方法(すなわちルビーinstall.rb)インストールを使用することができます。
次のようにXSLT4Rの構文は次のとおりです。
ruby xslt.rb stylesheet.xsl document.xml [arguments]
アプリケーションでXSLT4Rを使用したい場合は、あなたが必要なXSLTと入力パラメータを導入することができます。 例としては、次のとおりです:
require "xslt" stylesheet = File.readlines("stylesheet.xsl").to_s xml_doc = File.readlines("document.xml").to_s arguments = { 'image_dir' => '/jaja' } sheet = XSLT::Stylesheet.new( stylesheet, arguments ) # output to StdOut sheet.apply( xml_doc ) # output to 'str' str = "" sheet.output = [ str ] sheet.apply( xml_doc )