Install
sudo gem install nokogiri
Contribute
github.com/tenderlove/nokogiri

An HTML, XML, SAX, & Reader parser with the ability to search documents via XPath or CSS3 selectors… and much more

Nokogiri

Class Nokogiri::XSLT::Stylesheet inherits from Object

 

A Stylesheet represents an XSLT Stylesheet object. Stylesheet creation is done through Nokogiri.XSLT. Here is an example of transforming an XML::Document with a Stylesheet:

doc   = Nokogiri::XML(File.read('some_file.xml'))
xslt  = Nokogir::XSLT(File.read('some_transformer.xslt'))

puts xslt.transform(doc)

See Nokogiri::XSLT::Stylesheet#transform for more transformation information.

Public Class Methods

parse_stylesheet_doc(p1) Show Source

Parse a stylesheet from document.

static VALUE parse_stylesheet_doc(VALUE klass, VALUE xmldocobj) { xmlDocPtr xml ; xsltStylesheetPtr ss ; Data_Get_Struct(xmldocobj, xmlDoc, xml); exsltRegisterAll(); xsltSetGenericErrorFunc(NULL, xslt_generic_error_handler); ss = xsltParseStylesheetDoc(xmlCopyDoc(xml, 1)); /* 1 => recursive */ xsltSetGenericErrorFunc(NULL, NULL); return Data_Wrap_Struct(klass, NULL, dealloc, ss); }

Public Instance Methods

apply_to(document, params = []) Show Source
 

Apply an XSLT stylesheet to an XML::Document. params is an array of strings used as XSLT parameters. returns serialized document

# File lib/nokogiri/xslt/stylesheet.rb, line 20 20: def apply_to document, params = [] 21: serialize(transform(document, params)) 22: end
serialize(p1) Show Source

Serialize document to an xml string.

static VALUE serialize(VALUE self, VALUE xmlobj) { xmlDocPtr xml ; xsltStylesheetPtr ss ; xmlChar* doc_ptr ; int doc_len ; VALUE rval ; Data_Get_Struct(xmlobj, xmlDoc, xml); Data_Get_Struct(self, xsltStylesheet, ss); xsltSaveResultToString(&doc_ptr, &doc_len, xml, ss); rval = NOKOGIRI_STR_NEW(doc_ptr, doc_len); xmlFree(doc_ptr); return rval ; }
transform(...) Show Source

Apply an XSLT stylesheet to an XML::Document. params is an array of strings used as XSLT parameters. returns Nokogiri::XML::Document

Example:

  doc   = Nokogiri::XML(File.read(ARGV[0]))
  xslt  = Nokogiri::XSLT(File.read(ARGV[1]))
  puts xslt.transform(doc, ['key', 'value'])
static VALUE transform(int argc, VALUE* argv, VALUE self) { VALUE xmldoc, paramobj ; xmlDocPtr xml ; xmlDocPtr result ; xsltStylesheetPtr ss ; const char** params ; long param_len, j ; rb_scan_args(argc, argv, "11", &xmldoc, &paramobj); if (NIL_P(paramobj)) { paramobj = rb_ary_new2(0) ; } /* handle hashes as arguments. */ if(T_HASH == TYPE(paramobj)) { paramobj = rb_funcall(paramobj, rb_intern("to_a"), 0); paramobj = rb_funcall(paramobj, rb_intern("flatten"), 0); } Check_Type(paramobj, T_ARRAY); Data_Get_Struct(xmldoc, xmlDoc, xml); Data_Get_Struct(self, xsltStylesheet, ss); param_len = RARRAY_LEN(paramobj); params = calloc((size_t)param_len+1, sizeof(char*)); for (j = 0 ; j < param_len ; j++) { VALUE entry = rb_ary_entry(paramobj, j); const char * ptr = StringValuePtr(entry); params[j] = ptr; } params[param_len] = 0 ; result = xsltApplyStylesheet(ss, xml, params); free(params); if (!result) rb_raise(rb_eRuntimeError, "could not perform xslt transform on document"); return Nokogiri_wrap_xml_document(0, result) ; }