Module: Nokogiri::XSLT
Relationships & Source Files | |
Namespace Children | |
Classes:
| |
Defined in: | lib/nokogiri/xslt.rb, ext/nokogiri/nokogiri.c, ext/nokogiri/xslt_stylesheet.c, lib/nokogiri/xslt/stylesheet.rb |
Overview
See Stylesheet
for creating and manipulating Stylesheet
object.
Class Method Summary
-
.parse(xsl) → Nokogiri::XSLT::Stylesheet)
Parse the stylesheet in
xsl
, registering optionalmodules
as custom class handlers. -
.quote_params(params) → Array)
Quote parameters in
params
for stylesheet safety. -
.register(uri, custom_handler_class)
Register a class that implements custom
XSLT
transformation functions.
Class Method Details
.parse(xsl) → Nokogiri::XSLT::Stylesheet)
.parse(xsl, modules) → Nokogiri::XSLT::Stylesheet)
Parse the stylesheet in xsl
, registering optional modules
as custom class handlers.
- Parameters
-
xsl
(String) XSL content to be parsed into a stylesheet -
modules
(Hash<String ⇒ Class>) A hash of URI-to-handler relations for linking a namespace to a custom function handler.
⚠ The XSLT handler classes are registered globally.
Also see .register
Example
xml = Nokogiri.XML(<<~XML)
<nodes>
<node>Foo</node>
<node>Bar</node>
</nodes>
XML
handler = Class.new do
def reverse(node)
node.text.reverse
end
end
xsl = <<~XSL
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:myfuncs="http://nokogiri.org/xslt/myfuncs"
extension-element-prefixes="myfuncs">
<xsl:template match="/">
<reversed>
<xsl:for-each select="nodes/node">
<reverse><xsl:copy-of select="myfuncs:reverse(.)"/></reverse>
</xsl:for-each>
</reversed>
</xsl:template>
</xsl:stylesheet>
XSL
xsl = Nokogiri.XSLT(xsl, "http://nokogiri.org/xslt/myfuncs" => handler)
xsl.transform(xml).to_xml
# => "<?xml version=\"1.0\"?>\n" +
# "<reversed>\n" +
# " <reverse>ooF</reverse>\n" +
# " <reverse>raB</reverse>\n" +
# "</reversed>\n"
# File 'lib/nokogiri/xslt.rb', line 76
def parse(string, modules = {}) modules.each do |url, klass| XSLT.register(url, klass) end doc = XML::Document.parse(string, nil, nil, XML::ParseOptions::DEFAULT_XSLT) if Nokogiri.jruby? Stylesheet.parse_stylesheet_doc(doc, string) else Stylesheet.parse_stylesheet_doc(doc) end end
.quote_params(params) → Array)
Quote parameters in params
for stylesheet safety. See Nokogiri::XSLT::Stylesheet.transform
for example usage.
- Parameters
-
params
(Hash, Array)XSLT
parameters (key->value, or tuples of [key, value])
- Returns
-
Array of string parameters, with quotes correctly escaped for use with Stylesheet#transform
# File 'lib/nokogiri/xslt.rb', line 100
def quote_params(params) params.flatten.each_slice(2).with_object([]) do |kv, quoted_params| key, value = kv.map(&:to_s) value = if value.include?("'") "concat('#{value.gsub("'", %q{', "'", '})}')" else "'#{value}'" end quoted_params << key quoted_params << value end end
.register(uri, custom_handler_class)
Register a class that implements custom XSLT
transformation functions.
⚠ The XSLT handler classes are registered globally.
[Parameters}
-
uri
(String) The namespace for the custom handlers -
custom_handler_class
(Class) A class with ruby methods that can be called during transformation
See .parse for usage.
# File 'ext/nokogiri/xslt_stylesheet.c', line 391
static VALUE rb_xslt_s_register(VALUE self, VALUE uri, VALUE obj) { VALUE modules = rb_iv_get(self, "@modules"); if (NIL_P(modules)) { rb_raise(rb_eRuntimeError, "internal error: @modules not set"); } rb_hash_aset(modules, uri, obj); xsltRegisterExtModule( (unsigned char *)StringValueCStr(uri), initFunc, shutdownFunc ); return self; }