要約
要素の集合を表すクラスです。
XPath による探索をサポートします。
REXML::Element#elements はこのオブジェクトを返します。 XPath で相対パスを指定した場合は、この REXML::Element#elements のレシーバが基準要素となります。
目次
継承しているメソッド
- Enumerableから継承しているメソッド
-
- all?
- any?
- chain
- chunk
- chunk_while
- collect_concat
- count
- cycle
- detect
- drop
- drop_while
- each_cons
- each_entry
- each_slice
- each_with_index
- each_with_object
- entries
- filter
- filter_map
- find
- find_all
- find_index
- first
- flat_map
- grep
- grep_v
- group_by
- include?
- lazy
- map
- max
- max_by
- member?
- min
- min_by
- minmax
- minmax_by
- none?
- one?
- partition
- reduce
- reject
- reverse_each
- select
- slice_after
- slice_before
- slice_when
- sort
- sort_by
- sum
- take
- take_while
- tally
- to_h
- uniq
- zip
特異メソッド
new(parent) -> REXML::Elements
[permalink][rdoc][edit]-
空の要素の集合を表すオブジェクトを生成します。
通常は REXML::Element.new によって Elements オブジェクトが生成されるため、このメソッドを使う必要はありません。
- [PARAM] parant:
- 親要素オブジェクト
インスタンスメソッド
add(element = nil) -> REXML::Element
[permalink][rdoc][edit]self << element = nil -> REXML::Element
-
要素 element を追加します。
element には文字列もしくは REXML::Element オブジェクトを指定します。文字列を指定した場合には REXML::Element.new(element) で生成される要素を追加します。
element を省略した場合は、空の要素が追加されます。
追加された要素が返されます。
- [PARAM] element:
- 追加する要素
require 'rexml/document' a = REXML::Element.new('a') a.elements.add(REXML::Element.new('b')) # => <b/> a.to_s # => "<a><b/></a>" a.elements.add('c') # => <c/> a.to_s # => "<a><b/><c/></a>"
self[index, name = nil] -> REXML::Element | nil
[permalink][rdoc][edit]-
index が指し示している要素を返します。
index には整数もしくは文字列を指定できます。
index に整数を指定した場合は index 番目の子要素を返します。 index は 1-origin です。つまり最初の要素の index は 1 であり、 0 ではありません。 n 番目の要素の index は n であり、 n-1 ではありません。これは XPath の仕様に合わせています。
index に文字列を指定した場合はその文字列を XPath と見なし、それで指定された要素を返します。 XPath が複数の要素を指している場合は、そのうち一つを返します。 XPath の性質上、子要素でない要素を返す場合もあります。
name は index に整数を指定した場合にのみ意味があります。 name を指定した場合 name という名前を持つ子要素の中で index 番目のものを返します。この場合も index は 1-origin です。
整数で指定した場合でも、XPathで指定した場合でも、指定した要素が存在しない場合は nil を返します。
- [PARAM] index:
- 取り出したい要素の index (整数)もしくは xpath (文字列)
- [PARAM] name:
- 子要素の名前(文字列)
require 'rexml/document' doc = REXML::Document.new '<a><b/><c id="1"/><c id="2"/><d/></a>' doc.root.elements[1] # => <b/> doc.root.elements['c'] # => <c id='1'/> doc.root.elements[2,'c'] # => <c id='2'/> doc = REXML::Document.new '<a><b><c /><a id="1"/></b></a>' doc.root.elements["a"] # => nil doc.root.elements["b/a"] # => <a id='1'/> doc.root.elements["/a"] # => <a> ... </>
self[index] = element
[permalink][rdoc][edit]-
集合に要素 element を追加/更新します。
index で要素の更新する位置を指定します。 index には整数、文字列が指定できます。整数を指定した場合は index 番目の要素を変更します(1-originです)。文字列の場合は XPath としてマッチした要素を更新します。
整数/文字列どちらの場合でも対応する要素が存在しない場合は、末尾に追加されます。
- [PARAM] index:
- 要素を更新する位置
- [PARAM] element:
- 要素(REXML::Elementオブジェクト)
require 'rexml/document' doc = REXML::Document.new '<a/>' doc.root.elements[10] = REXML::Element.new('b') doc.root.to_s # => "<a><b/></a>" doc.root.elements[1] # => <b/> doc.root.elements[1] = REXML::Element.new('c') doc.root.to_s # => "<a><c/></a>" doc.root.elements['c'] = REXML::Element.new('d') doc.root.to_s # => "<a><d/></a>"
collect(xpath = nil) {|element| .. } -> [object]
[permalink][rdoc][edit]-
Enumerable#collect と同様、各子要素に対しブロックを呼び出し、その返り値の配列を返します。
xpath を指定した場合は、その XPath 文字列にマッチする要素に対し同様の操作をします。
- [PARAM] xpath:
- XPath文字列
[SEE_ALSO] REXML::Elements#each
delete(element) -> Element
[permalink][rdoc][edit]-
element で指定した子要素を取り除きます。
element には、REXML::Element、整数、文字列が指定できます。 Element オブジェクトを指定した場合は、その子要素を取り除きます。整数を指定した場合には element 番目の子要素を削除します(1-originです)。文字列を指定した場合は、削除する要素を XPath で指定します。 XPathが複数の要素を指している場合は、そのうち一つを削除します。
取り除かれた要素を返します。
XPath で指定した場合、子要素ではない要素も取り除けることに注意してください。
- [PARAM] element:
- 削除する要素(REXML::Element, 整数, 文字列)
require 'rexml/document' doc = REXML::Document.new '<a><b/><c/><c id="1"/></a>' b = doc.root.elements[1] doc.root.elements.delete b # => <b/> doc.root.to_s # => "<a><c/><c id='1'/></a>" doc.elements.delete("a/c[@id='1']") # => <c id='1'/> doc.root.to_s # => "<a><c/></a>" doc.root.elements.delete 1 # => <c/> doc.root.to_s # => "<a/>" doc.root.elements.delete '/a' doc.root.to_s # => ""
delete_all(xpath) -> [REXML::Element]
[permalink][rdoc][edit]-
xpath で指定した XPath 文字列にマッチする要素をすべて取り除きます。
- [PARAM] xpath:
- 取り除く要素を指し示す XPath 文字列
require 'rexml/document' doc = REXML::Document.new('<a><c/><c/><c/><c/></a>') doc.elements.delete_all("a/c") # => [<c/>, <c/>, <c/>, <c/>] doc.to_s # => "<a/>"
each(xpath = nil) {|element| ... } -> [REXML::Elements]
[permalink][rdoc][edit]-
全ての子要素に対しブロックを呼び出します。
xpath を指定した場合には、その XPath 文字列にマッチする要素に対しブロックを呼び出します。
REXML::XPath.each などとは異なり、要素以外のテキストノードなどはすべて無視されることに注意してください。
- [PARAM] xpath:
- XPath文字列
require 'rexml/document' require 'rexml/xpath' doc = REXML::Document.new '<a><b/><c/><d/>sean<b/><c/><d/></a>' # <b/>,<c/>,<d/>,<b/>,<c/>, <d/> がブロックに渡される doc.root.elements.each {|e|p e} # <b/>, <b/> がブロックに渡される doc.root.elements.each('b') {|e|p e} #-> Yields b, b elements # <b/>,<c/>,<d/>,<b/>,<c/>,<d/> がブロックに渡される doc.root.elements.each('child::node()') {|e|p e} # <b/>,<c/>,<d/>,"sean",<b/>,<c/>,<d/> がブロックに渡される REXML::XPath.each(doc.root, 'child::node()'){|node| p node }
empty? -> bool
[permalink][rdoc][edit]-
子要素を持たない場合に true を返します。
index(element) -> Integer
[permalink][rdoc][edit]-
element で指定した要素が何番目の子要素であるかを返します。
element が子要素でない場合は -1 を返します。
返り値は 1-origin です。
- [PARAM] element:
- インデックスを知りたい要素(REXML::Element オブジェクト)
[SEE_ALSO] REXML::Element#[]
inject(xpath = nil, initial = nil) {|element| ... } -> object
[permalink][rdoc][edit]-
Enumerable#inject と同様、各子要素に対し畳み込みをします。
xpath を指定した場合は、その XPath 文字列にマッチする要素に対し同様の操作をします。
- [PARAM] xpath:
- XPath文字列
[SEE_ALSO] REXML::Elements#each
size -> Integer
[permalink][rdoc][edit]-
保持している要素の個数を返します。
require 'rexml/document' doc = REXML::Document.new '<a>sean<b/>elliott<b/>russell<b/></a>' # doc.root は3つの要素と3つのテキストノードを持つため、6を返す doc.root.size # => 6 # そのうち要素は3つであるため、以下は3を返す doc.root.elements.size # => 3
to_a(xpath = nil) -> [REXML::Element]
[permalink][rdoc][edit]-
すべての子要素の配列を返します。
xpath を指定した場合は、その XPath 文字列にマッチする要素の配列を返します。
REXML::Elements#each と同様、REXML::XPath.match などと異なり、要素以外の子ノードは無視されます。
- [PARAM] xpath:
- XPath文字列
require 'rexml/document' require 'rexml/xpath' doc = REXML::Document.new '<a>sean<b/>elliott<c/></a>' doc.root.elements.to_a # => [<b/>, <c/>] doc.root.elements.to_a("child::node()") # => [<b/>, <c/>] REXML::XPath.match(doc.root, "child::node()") # => ["sean", <b/>, "elliott", <c/>]