Class: Moxml::Element
Constant Summary
Constants inherited from Node
Instance Attribute Summary
Attributes inherited from Node
Instance Method Summary collapse
- #[](name) ⇒ Object
- #[]=(name, value) ⇒ Object
- #add_namespace(prefix, uri) ⇒ Object (also: #add_namespace_definition)
- #attribute(name) ⇒ Object
- #attributes ⇒ Object
-
#expanded_name ⇒ Object
Returns the expanded name including namespace prefix.
- #find_all(xpath) ⇒ Object
-
#find_element(xpath) ⇒ Object
Convenience find methods.
-
#get(attr_name) ⇒ Object
Alias for getting attribute value (used by XPath engine).
-
#identifier ⇒ String
Returns the primary identifier for this element (its tag name).
-
#in_scope_namespaces ⇒ Object
Returns all namespaces in scope for this element, including those inherited from ancestor elements.
- #inner_text ⇒ Object
- #inner_xml ⇒ Object
- #inner_xml=(xml) ⇒ Object
- #name ⇒ Object
- #name=(value) ⇒ Object
-
#namespace ⇒ Object
it’s NOT the same as namespaces.first.
-
#namespace=(ns_or_hash) ⇒ Object
add the prefix to the element name and add the namespace to the list of namespace definitions.
-
#namespace_name ⇒ Object
Returns the namespace URI of this element (alias for namespace_uri).
-
#namespace_prefix ⇒ Object
Returns the namespace prefix of this element.
-
#namespace_uri ⇒ Object
Returns the namespace URI of this element.
- #namespaces ⇒ Object (also: #namespace_definitions)
-
#nodes ⇒ Object
Alias for children (used by XPath engine).
- #remove_attribute(name) ⇒ Object
-
#set_attributes(attributes_hash) ⇒ Object
Bulk attribute setting.
- #text ⇒ Object
- #text=(content) ⇒ Object
-
#with_attribute(name, value) ⇒ Object
Fluent interface methods.
-
#with_child(child) ⇒ Object
Chainable child addition.
- #with_namespace(prefix, uri) ⇒ Object
- #with_text(content) ⇒ Object
Methods inherited from Node
#==, adapter, #add_child, #add_next_sibling, #add_previous_sibling, #at_xpath, #children, #clone, #document, #each_node, #find, #first_child, #has_children?, #initialize, #last_child, #next_sibling, #parent, #previous_sibling, #remove, #replace, #to_xml, wrap, #xpath
Methods included from XmlUtils
#encode_entities, #normalize_xml_value, #validate_comment_content, #validate_declaration_encoding, #validate_declaration_standalone, #validate_declaration_version, #validate_element_name, #validate_entity_reference_name, #validate_pi_target, #validate_prefix, #validate_uri
Constructor Details
This class inherits a constructor from Moxml::Node
Instance Method Details
#[](name) ⇒ Object
48 49 50 |
# File 'lib/moxml/element.rb', line 48 def [](name) adapter.get_attribute_value(@native, name) end |
#[]=(name, value) ⇒ Object
43 44 45 46 |
# File 'lib/moxml/element.rb', line 43 def []=(name, value) adapter.set_attribute(@native, name, normalize_xml_value(value)) @attributes_cache = nil end |
#add_namespace(prefix, uri) ⇒ Object Also known as: add_namespace_definition
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/moxml/element.rb', line 81 def add_namespace(prefix, uri) adapter.create_namespace(@native, prefix, uri, namespace_validation_mode: context.config.namespace_validation_mode) @namespaces_cache = nil self rescue ValidationError => e # Re-raise as NamespaceError, provide attributes for error context # but the to_s will only add details if provided raise Moxml::NamespaceError.new( e., prefix: prefix, uri: uri, element: self, ) end |
#attribute(name) ⇒ Object
52 53 54 55 |
# File 'lib/moxml/element.rb', line 52 def attribute(name) native_attr = adapter.get_attribute(@native, name) native_attr && Attribute.new(native_attr, context) end |
#attributes ⇒ Object
67 68 69 70 71 72 73 |
# File 'lib/moxml/element.rb', line 67 def attributes @attributes ||= adapter.attributes(@native).map do |attr| a = Attribute.new(attr, context) a.instance_variable_set(:@parent_node, self) a end end |
#expanded_name ⇒ Object
Returns the expanded name including namespace prefix
23 24 25 26 27 28 29 |
# File 'lib/moxml/element.rb', line 23 def if namespace_prefix && !namespace_prefix.empty? "#{namespace_prefix}:#{name}" else name end end |
#find_all(xpath) ⇒ Object
195 196 197 |
# File 'lib/moxml/element.rb', line 195 def find_all(xpath) xpath(xpath).to_a end |
#find_element(xpath) ⇒ Object
Convenience find methods
191 192 193 |
# File 'lib/moxml/element.rb', line 191 def find_element(xpath) at_xpath(xpath) end |
#get(attr_name) ⇒ Object
Alias for getting attribute value (used by XPath engine)
58 59 60 |
# File 'lib/moxml/element.rb', line 58 def get(attr_name) attribute(attr_name) end |
#identifier ⇒ String
Returns the primary identifier for this element (its tag name)
18 19 20 |
# File 'lib/moxml/element.rb', line 18 def identifier name end |
#in_scope_namespaces ⇒ Object
Returns all namespaces in scope for this element, including those inherited from ancestor elements.
128 129 130 131 132 |
# File 'lib/moxml/element.rb', line 128 def in_scope_namespaces adapter.in_scope_namespaces(@native).map do |ns| Namespace.new(ns, context) end end |
#inner_text ⇒ Object
148 149 150 |
# File 'lib/moxml/element.rb', line 148 def inner_text adapter.inner_text(@native) end |
#inner_xml ⇒ Object
152 153 154 |
# File 'lib/moxml/element.rb', line 152 def inner_xml adapter.inner_xml(@native) end |
#inner_xml=(xml) ⇒ Object
156 157 158 159 160 |
# File 'lib/moxml/element.rb', line 156 def inner_xml=(xml) doc = context.parse("<root>#{xml}</root>") adapter.replace_children(@native, doc.root.children.map(&:native)) invalidate_children_cache! end |
#name ⇒ Object
8 9 10 |
# File 'lib/moxml/element.rb', line 8 def name adapter.node_name(@native) end |
#name=(value) ⇒ Object
12 13 14 |
# File 'lib/moxml/element.rb', line 12 def name=(value) adapter.set_node_name(@native, value) end |
#namespace ⇒ Object
it’s NOT the same as namespaces.first
99 100 101 102 |
# File 'lib/moxml/element.rb', line 99 def namespace ns = adapter.namespace(@native) ns && Namespace.new(ns, context) end |
#namespace=(ns_or_hash) ⇒ Object
add the prefix to the element name and add the namespace to the list of namespace definitions
106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/moxml/element.rb', line 106 def namespace=(ns_or_hash) if ns_or_hash.is_a?(Hash) adapter.set_namespace( @native, adapter.create_namespace(@native, *ns_or_hash.to_a.first, namespace_validation_mode: context.config.namespace_validation_mode), ) else adapter.set_namespace(@native, ns_or_hash&.native) end @namespaces_cache = nil end |
#namespace_name ⇒ Object
Returns the namespace URI of this element (alias for namespace_uri)
135 136 137 |
# File 'lib/moxml/element.rb', line 135 def namespace_name namespace_uri end |
#namespace_prefix ⇒ Object
Returns the namespace prefix of this element
32 33 34 35 |
# File 'lib/moxml/element.rb', line 32 def namespace_prefix ns = namespace ns&.prefix end |
#namespace_uri ⇒ Object
Returns the namespace URI of this element
38 39 40 41 |
# File 'lib/moxml/element.rb', line 38 def namespace_uri ns = namespace ns&.uri end |
#namespaces ⇒ Object Also known as: namespace_definitions
119 120 121 122 123 |
# File 'lib/moxml/element.rb', line 119 def namespaces @namespaces ||= adapter.namespace_definitions(@native).map do |ns| Namespace.new(ns, context) end end |
#nodes ⇒ Object
Alias for children (used by XPath engine)
200 201 202 |
# File 'lib/moxml/element.rb', line 200 def nodes children end |
#remove_attribute(name) ⇒ Object
75 76 77 78 79 |
# File 'lib/moxml/element.rb', line 75 def remove_attribute(name) adapter.remove_attribute(@native, name) @attributes_cache = nil self end |
#set_attributes(attributes_hash) ⇒ Object
Bulk attribute setting
179 180 181 182 |
# File 'lib/moxml/element.rb', line 179 def set_attributes(attributes_hash) attributes_hash.each { |name, value| self[name] = value } self end |
#text ⇒ Object
139 140 141 |
# File 'lib/moxml/element.rb', line 139 def text adapter.text_content(@native) end |
#text=(content) ⇒ Object
143 144 145 146 |
# File 'lib/moxml/element.rb', line 143 def text=(content) adapter.set_text_content(@native, normalize_xml_value(content)) invalidate_children_cache! end |
#with_attribute(name, value) ⇒ Object
Fluent interface methods
163 164 165 166 |
# File 'lib/moxml/element.rb', line 163 def with_attribute(name, value) self[name] = value self end |
#with_child(child) ⇒ Object
Chainable child addition
185 186 187 188 |
# File 'lib/moxml/element.rb', line 185 def with_child(child) add_child(child) self end |
#with_namespace(prefix, uri) ⇒ Object
168 169 170 171 |
# File 'lib/moxml/element.rb', line 168 def with_namespace(prefix, uri) add_namespace(prefix, uri) self end |
#with_text(content) ⇒ Object
173 174 175 176 |
# File 'lib/moxml/element.rb', line 173 def with_text(content) self.text = content self end |