Class: Xlsxrb::Ooxml::SharedStringsParser

Inherits:
Object
  • Object
show all
Defined in:
lib/xlsxrb/ooxml/shared_strings_parser.rb,
sig/generated/xlsxrb/ooxml/shared_strings_parser.rbs

Overview

SAX-based parser for xl/sharedStrings.xml. Returns an Array of strings (index = SST index).

Constant Summary collapse

XML_ENTITIES =

Returns:

  • (Object)
{ "&amp;" => "&", "&lt;" => "<", "&gt;" => ">", "&quot;" => '"', "&apos;" => "'" }.freeze

Class Method Summary collapse

Class Method Details

.each_event(xml_string, part_name: "xl/sharedStrings.xml", &block) ⇒ void

This method returns an undefined value.

Yields Event objects for each shared string.

Parameters:

  • xml_string (Object)
  • part_name: (Object) (defaults to: "xl/sharedStrings.xml")


31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/xlsxrb/ooxml/shared_strings_parser.rb', line 31

def self.each_event(xml_string, part_name: "xl/sharedStrings.xml", &block)
  return enum_for(:each_event, xml_string, part_name: part_name) unless block
  return if xml_string.nil? || xml_string.empty?

  index = 0
  fast_scan(xml_string) do |str|
    block.call(Event.new(
                 type: :sst_item,
                 args: [str],
                 source: { part: part_name, index: index }
               ))
    index += 1
  end
end

.parse(xml_string, _part_name: "xl/sharedStrings.xml") ⇒ Object

Parses all shared strings and returns an Array of strings.

Parameters:

  • xml_string (Object)
  • _part_name: (Object) (defaults to: "xl/sharedStrings.xml")

Returns:

  • (Object)


15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/xlsxrb/ooxml/shared_strings_parser.rb', line 15

def self.parse(xml_string, _part_name: "xl/sharedStrings.xml")
  return [] if xml_string.nil? || xml_string.empty?

  if xml_string.include?("<!DOCTYPE") || xml_string.include?("<!ENTITY")
    listener = Class.new { include REXML::SAX2Listener }.new
    XmlParser.parse(xml_string, listener)
  end

  strings = []
  fast_scan(xml_string) do |str|
    strings << str
  end
  strings
end