module Nokogiri::XSLT
See Nokogiri::XSLT::Stylesheet for creating and manipulating Stylesheet objects.
🛡 Do not use this module for untrusted stylesheet documents. libxslt does not support safely processing untrusted stylesheets. Untrusted stylesheets may access the file system and network, consume large amounts of CPU, memory, or other system resources, and IO and file access are not restricted. Additionally, the stylesheet is parsed by libxml2 with NOENT and DTDLOAD enabled (see ParseOptions::DEFAULT_XSLT), meaning that external entities will be resolved and external subsets will be loaded during parsing.
Public Class Methods
Source
# File lib/nokogiri/xslt.rb, line 79 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
Parse the stylesheet in xsl, registering optional modules as custom class handlers.
🛡 Do not pass untrusted stylesheet content to this method. See Nokogiri::XSLT for more information.
- 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"
Source
# File lib/nokogiri/xslt.rb, line 103 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
Quote parameters in params for stylesheet safety. See Nokogiri::XSLT::Stylesheet.transform for example usage.
- Parameters
-
params(Hash, Array)XSLTparameters (key->value, or tuples of [key, value])
- Returns
-
Array of string parameters, with quotes correctly escaped for use with
XSLT::Stylesheet.transform
Source
# File lib/nokogiri/xslt.rb, line 130 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
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.