class Nokogiri::XML::Namespace

Attributes

document[R]

Public Instance Methods

deconstruct_keys(array_of_names) → Hash click to toggle source

Returns a hash describing the Namespace, to use in pattern matching.

Valid keys and their values:

  • prefix → (String, nil) The namespace’s prefix, or nil if there is no prefix (e.g., default namespace).

  • href → (String) The namespace’s URI

Example

doc = Nokogiri::XML.parse(<<~XML)
  <?xml version="1.0"?>
  <root xmlns="http://nokogiri.org/ns/default" xmlns:noko="http://nokogiri.org/ns/noko">
    <child1 foo="abc" noko:bar="def"/>
    <noko:child2 foo="qwe" noko:bar="rty"/>
  </root>
XML

doc.root.elements.first.namespace
# => #(Namespace:0x35c { href = "http://nokogiri.org/ns/default" })

doc.root.elements.first.namespace.deconstruct_keys([:prefix, :href])
# => {:prefix=>nil, :href=>"http://nokogiri.org/ns/default"}

doc.root.elements.last.namespace
# => #(Namespace:0x370 {
#      prefix = "noko",
#      href = "http://nokogiri.org/ns/noko"
#      })

doc.root.elements.last.namespace.deconstruct_keys([:prefix, :href])
# => {:prefix=>"noko", :href=>"http://nokogiri.org/ns/noko"}

Since v1.14.0

# File lib/nokogiri/xml/namespace.rb, line 46
def deconstruct_keys(keys)
  { prefix: prefix, href: href }
end
href() → String click to toggle source

Returns the URI reference for this Namespace.

Example

doc = Nokogiri::XML.parse(<<~XML)
  <?xml version="1.0"?>
  <root xmlns="http://nokogiri.org/ns/default" xmlns:noko="http://nokogiri.org/ns/noko">
    <child1 foo="abc" noko:bar="def"/>
    <noko:child2 foo="qwe" noko:bar="rty"/>
  </root>
XML

doc.root.elements.first.namespace.href
# => "http://nokogiri.org/ns/default"

doc.root.elements.last.namespace.href
# => "http://nokogiri.org/ns/noko"
static VALUE
href(VALUE self)
{
  xmlNsPtr ns;

  Noko_Namespace_Get_Struct(self, xmlNs, ns);
  if (!ns->href) { return Qnil; }

  return NOKOGIRI_STR_NEW2(ns->href);
}
prefix() → String or nil click to toggle source

Return the prefix for this Namespace, or nil if there is no prefix (e.g., default namespace).

Example

doc = Nokogiri::XML.parse(<<~XML)
  <?xml version="1.0"?>
  <root xmlns="http://nokogiri.org/ns/default" xmlns:noko="http://nokogiri.org/ns/noko">
    <child1 foo="abc" noko:bar="def"/>
    <noko:child2 foo="qwe" noko:bar="rty"/>
  </root>
XML

doc.root.elements.first.namespace.prefix
# => nil

doc.root.elements.last.namespace.prefix
# => "noko"
static VALUE
prefix(VALUE self)
{
  xmlNsPtr ns;

  Noko_Namespace_Get_Struct(self, xmlNs, ns);
  if (!ns->prefix) { return Qnil; }

  return NOKOGIRI_STR_NEW2(ns->prefix);
}