Skip to content

module XML

The XML module allows parsing and generating XML documents.

Parsing

XML#parse will parse xml from String or IO and return xml document as an XML::Node which represents all kinds of xml nodes.

Example:

require "xml"

xml = <<-XML
 <person id="1">
  <firstname>Jane</firstname>
  <lastname>Doe</lastname>
 </person>
XML

document = XML.parse(xml)             # : XML::Node
person = document.first_element_child # : XML::Node?
if person
  puts person["id"] # "1" : String?

  puts typeof(person.children)                       # XML::NodeSet
  person.children.select(&.element?).each do |child| # Select only element children
    puts typeof(child)                               # XML::Node
    puts child.name                                  # firstname : String
    puts child.content                               # Jane : String?
  end
end

Generating

Use XML.build, which uses an XML::Builder:

require "xml"

string = XML.build(indent: "  ") do |xml|
  xml.element("person", id: 1) do
    xml.element("firstname") { xml.text "Jane" }
    xml.element("lastname") { xml.text "Doe" }
  end
end

string # => "<?xml version=\"1.0\"?>\n<person id=\"1\">\n  <firstname>Jane</firstname>\n  <lastname>Doe</lastname>\n</person>\n"

Class methods

.build(version : String? = nil, encoding : String? = nil, indent = nil, quote_char = nil

Returns the resulting String of writing XML to the yielded XML::Builder.

Builds an XML document (see #document) including XML declaration (<?xml?>).

require "xml"

string = XML.build(indent: "  ") do |xml|
  xml.element("person", id: 1) do
    xml.element("firstname") { xml.text "Jane" }
    xml.element("lastname") { xml.text "Doe" }
  end
end

string # => "<?xml version=\"1.0\"?>\n<person id=\"1\">\n  <firstname>Jane</firstname>\n  <lastname>Doe</lastname>\n</person>\n"
View source

.build(io : IO, version : String? = nil, encoding : String? = nil, indent = nil, quote_char = nil, &) : Nil

Writes XML document into the given IO. An XML::Builder is yielded to the block.

Builds an XML document (see #document) including XML declaration (<?xml?>).

View source

.build_fragment(io : IO, *, indent = nil, quote_char = nil, &) : Nil

Writes XML fragment into the given IO. An XML::Builder is yielded to the block.

Builds an XML fragment without XML declaration (<?xml?>).

View source

.build_fragment(*, indent = nil, quote_char = nil

Returns the resulting String of writing XML to the yielded XML::Builder.

Builds an XML fragment without XML declaration (<?xml?>).

require "xml"

string = XML.build_fragment(indent: "  ") do |xml|
  xml.element("person", id: 1) do
    xml.element("firstname") { xml.text "Jane" }
    xml.element("lastname") { xml.text "Doe" }
  end
end

string # => "<person id=\"1\">\n  <firstname>Jane</firstname>\n  <lastname>Doe</lastname>\n</person>\n"
View source

.parse(string : String, options : ParserOptions = ParserOptions.default) : Node

Parses an XML document from string with options into an XML::Node.

See ParserOptions.default for default options.

View source

.parse(io : IO, options : ParserOptions = ParserOptions.default) : Node

Parses an XML document from io with options into an XML::Node.

See ParserOptions.default for default options.

View source

.parse_html(string : String, options : HTMLParserOptions = HTMLParserOptions.default) : Node

Parses an HTML document from string with options into an XML::Node.

See HTMLParserOptions.default for default options.

View source

.parse_html(io : IO, options : HTMLParserOptions = HTMLParserOptions.default) : Node

Parses an HTML document from io with options into an XML::Node.

See HTMLParserOptions.default for default options.

View source