Class: Moxml::Element
Constant Summary
Constants inherited from Node
Instance Attribute Summary
Attributes inherited from Node
#context, #native, #parent_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
Returns attribute value by name (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
-
#invalidate_attribute_cache! ⇒ Object
Called by Attribute#remove to invalidate the cached attributes.
- #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).
-
#raw_inner_text ⇒ Object
Returns inner text without entity marker restoration.
- #remove_attribute(name) ⇒ Object
-
#set_attributes(attributes_hash) ⇒ Object
Bulk attribute setting.
- #text ⇒ Object (also: #content)
- #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, #after, #at_xpath, #before, #blank?, #children, #document, #dup, #each, #each_node, #find, #first_child, #has_children?, #initialize, #last_child, #next_sibling, node_type_map, #outer_xml, #parent, #previous_sibling, #refresh_native!, #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
45 46 47 48 |
# File 'lib/moxml/element.rb', line 45 def [](name) val = adapter.get_attribute_value(@native, name) val ? adapter.restore_entities(val) : val end |
#[]=(name, value) ⇒ Object
40 41 42 43 |
# File 'lib/moxml/element.rb', line 40 def []=(name, value) adapter.set_attribute(@native, name, normalize_xml_value(value)) @attributes = nil end |
#add_namespace(prefix, uri) ⇒ Object Also known as: add_namespace_definition
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/moxml/element.rb', line 74 def add_namespace(prefix, uri) adapter.create_namespace(@native, prefix, uri, namespace_validation_mode: context.config.namespace_validation_mode) @namespaces = 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
50 51 52 53 |
# File 'lib/moxml/element.rb', line 50 def attribute(name) native_attr = adapter.get_attribute(@native, name) native_attr && Attribute.new(native_attr, context) end |
#attributes ⇒ Object
60 61 62 63 64 65 66 |
# File 'lib/moxml/element.rb', line 60 def attributes @attributes ||= adapter.attributes(@native).map do |attr| a = Attribute.new(attr, context) a.parent_node = self a end end |
#expanded_name ⇒ Object
Returns the expanded name including namespace prefix
20 21 22 23 24 25 26 |
# File 'lib/moxml/element.rb', line 20 def if namespace_prefix && !namespace_prefix.empty? "#{namespace_prefix}:#{name}" else name end end |
#find_all(xpath) ⇒ Object
199 200 201 |
# File 'lib/moxml/element.rb', line 199 def find_all(xpath) xpath(xpath).to_a end |
#find_element(xpath) ⇒ Object
Convenience find methods
195 196 197 |
# File 'lib/moxml/element.rb', line 195 def find_element(xpath) at_xpath(xpath) end |
#get(attr_name) ⇒ Object
Returns attribute value by name (used by XPath engine)
56 57 58 |
# File 'lib/moxml/element.rb', line 56 def get(attr_name) self[attr_name] end |
#identifier ⇒ String
Returns the primary identifier for this element (its tag name)
15 16 17 |
# File 'lib/moxml/element.rb', line 15 def identifier name end |
#in_scope_namespaces ⇒ Object
Returns all namespaces in scope for this element, including those inherited from ancestor elements.
121 122 123 124 125 |
# File 'lib/moxml/element.rb', line 121 def in_scope_namespaces adapter.in_scope_namespaces(@native).map do |ns| Namespace.new(ns, context) end end |
#inner_text ⇒ Object
144 145 146 147 |
# File 'lib/moxml/element.rb', line 144 def inner_text text = raw_inner_text adapter.restore_entities(text) end |
#inner_xml ⇒ Object
155 156 157 |
# File 'lib/moxml/element.rb', line 155 def inner_xml adapter.inner_xml(@native) end |
#inner_xml=(xml) ⇒ Object
159 160 161 162 163 164 |
# File 'lib/moxml/element.rb', line 159 def inner_xml=(xml) wrapper = "_moxml_inner_#{Process.pid}_#{object_id}" doc = context.parse("<#{wrapper}>#{xml}</#{wrapper}>") adapter.replace_children(@native, doc.root.children.map(&:native)) invalidate_children_cache! end |
#invalidate_attribute_cache! ⇒ Object
Called by Attribute#remove to invalidate the cached attributes
209 210 211 |
# File 'lib/moxml/element.rb', line 209 def invalidate_attribute_cache! @attributes = nil end |
#name ⇒ Object
5 6 7 |
# File 'lib/moxml/element.rb', line 5 def name adapter.node_name(@native) end |
#name=(value) ⇒ Object
9 10 11 |
# File 'lib/moxml/element.rb', line 9 def name=(value) adapter.set_node_name(@native, value) end |
#namespace ⇒ Object
it’s NOT the same as namespaces.first
92 93 94 95 |
# File 'lib/moxml/element.rb', line 92 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
99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/moxml/element.rb', line 99 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 = nil end |
#namespace_name ⇒ Object
Returns the namespace URI of this element (alias for namespace_uri)
128 129 130 |
# File 'lib/moxml/element.rb', line 128 def namespace_name namespace_uri end |
#namespace_prefix ⇒ Object
Returns the namespace prefix of this element
29 30 31 32 |
# File 'lib/moxml/element.rb', line 29 def namespace_prefix ns = namespace ns&.prefix end |
#namespace_uri ⇒ Object
Returns the namespace URI of this element
35 36 37 38 |
# File 'lib/moxml/element.rb', line 35 def namespace_uri ns = namespace ns&.uri end |
#namespaces ⇒ Object Also known as: namespace_definitions
112 113 114 115 116 |
# File 'lib/moxml/element.rb', line 112 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)
204 205 206 |
# File 'lib/moxml/element.rb', line 204 def nodes children end |
#raw_inner_text ⇒ Object
Returns inner text without entity marker restoration. Used internally when raw content with markers is needed (e.g., for DOM construction).
151 152 153 |
# File 'lib/moxml/element.rb', line 151 def raw_inner_text adapter.inner_text(@native) end |
#remove_attribute(name) ⇒ Object
68 69 70 71 72 |
# File 'lib/moxml/element.rb', line 68 def remove_attribute(name) adapter.remove_attribute(@native, name) @attributes = nil self end |
#set_attributes(attributes_hash) ⇒ Object
Bulk attribute setting
183 184 185 186 |
# File 'lib/moxml/element.rb', line 183 def set_attributes(attributes_hash) attributes_hash.each { |name, value| self[name] = value } self end |
#text ⇒ Object Also known as: content
132 133 134 135 |
# File 'lib/moxml/element.rb', line 132 def text val = adapter.text_content(@native) adapter.restore_entities(val) end |
#text=(content) ⇒ Object
139 140 141 142 |
# File 'lib/moxml/element.rb', line 139 def text=(content) adapter.set_text_content(@native, normalize_xml_value(content)) invalidate_children_cache! end |
#with_attribute(name, value) ⇒ Object
Fluent interface methods
167 168 169 170 |
# File 'lib/moxml/element.rb', line 167 def with_attribute(name, value) self[name] = value self end |
#with_child(child) ⇒ Object
Chainable child addition
189 190 191 192 |
# File 'lib/moxml/element.rb', line 189 def with_child(child) add_child(child) self end |
#with_namespace(prefix, uri) ⇒ Object
172 173 174 175 |
# File 'lib/moxml/element.rb', line 172 def with_namespace(prefix, uri) add_namespace(prefix, uri) self end |
#with_text(content) ⇒ Object
177 178 179 180 |
# File 'lib/moxml/element.rb', line 177 def with_text(content) self.text = content self end |