module Nokogiri::XSLT - nokogiri-1.15.2 Documentation

# module Nokogiri::XSLT

See `Nokogiri::XSLT::Stylesheet` for creating and manipulating `Stylesheet` object.

### Public Class Methods

parse(xsl) → Nokogiri::XSLT::Stylesheet click to toggle source
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 `Nokogiri::XSLT.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 click to toggle source

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 `XSLT::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) click to toggle source

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 `Nokogiri::XSLT.parse` for usage.

    # File lib/nokogiri/xslt.rb, line 127
    def register(uri, custom_handler_class)
      # NOTE: this is implemented in the C extension, see ext/nokogiri/xslt_stylesheet.c
      raise NotImplementedError, "Nokogiri::XSLT.register is not implemented on JRuby"
    end