최고의 루비 XML, XSLT와 XPath를 자습서 튜토리얼 2024년, 이 튜토리얼에서는 XML은 무엇입니까?,XML 파서와 API 구조,루비는 구문 분석하고 XML을 만들 수 있습니다,DOM 파서,SAX 파서,XPath를 루비,XSLT와 루비,추가 정보,를 배울 수 있습니다.
그것은 확장 마크 업 언어 XML (확장 마크 업 언어)을 의미한다.
확장 마크 업 언어 표준 일반화 마크 업 언어로 구조화 된 마크 업 언어를 갖는 전자 문서를 표시하는 방법의 서브 세트.
는 데이터 유형을 정의하는 데이터를 태그를 사용할 수 있으며, 사용자가 자신의 마크 업 언어 소스 언어를 정의 할 수 있도록하는 기술이다. 그것은 설명하고 응용 프로그램이나 구조화 된 데이터의 벤더 독립적 교환에 대한 통합 된 접근 방식을 제공, 웹 전송에 적합하다.
자세한 내용은 우리의 참조하시기 바랍니다 XML 자습서를
XML 파서 SAX와 DOM은 주로 이가지 있습니다.
XML 문서의 루비 구문 분석이 라이브러리 REXML 라이브러리를 사용할 수 있습니다.
REXML 라이브러리는 XML 툴킷 루비, 순수 루비 언어를 사용 XML1.0 규범을 따르도록입니다.
Ruby1.8 및 이후 버전에서, 라이브러리는 루비 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>
의 XML 데이터를 구문 분석 시작하자 먼저 우리가 REXML / 문서 라이브러리를 도입, 우리가 일반적으로 도입 최상위 네임 스페이스 REXML에있을 수 있습니다 :
#!/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[0ko40] + (data.length > 40 ? "ko." : "") 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"
, XPath에이 정보를 XML 언어의 문서입니다 찾기 위해 우리는 (:보기 XML을 볼 수 XPath를 사용하여 XPath를 자습서 ).
XPath는 그것이 XML 문서 언어 위치 부분 (표준 일반화 마크 업 언어의 서브 세트)를 결정하는데 사용되는 방법은 XML 경로 언어이다. XML 트리의 XPath 기반 및 트리 데이터 구조의 노드들에 대해보고 할 수있는 능력을 제공한다.
분석 (문서 객체 모델) 트리를 기반으로 REXML 클래스에 의해 루비의 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'> ko. </> War, Thriller Anime, Science Fiction Anime, Action Comedy ["DVD", "DVD", "DVD", "VHS"]
루비는 간단한 설명이 아래에 주어진 두 개의 XSLT 파서를 가지고 :
이 파서는 정의 마사요시 Takahash에 의해 작성되고 유지된다. 이것은 주로 리눅스 운영 체제를 대상으로 다음과 같은 라이브러리가 필요합니다 :
당신은 할 수 있습니다 루비 Sablotron는 이 라이브러리를 찾을 수 있습니다.
XSLT4R은 100 % 루비 모듈입니다 XSLT4R 아카이브를 포함, XMLScan 작업을해야합니다. 이 모듈은 표준 루비 설치 방법 (즉, 루비 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' => '/koko' } sheet = XSLT::Stylesheet.new( stylesheet, arguments ) # output to StdOut sheet.apply( xml_doc ) # output to 'str' str = "" sheet.output = [ str ] sheet.apply( xml_doc )