File | /usr/lib/perl5/XML/LibXML/NodeList.pm |
Statements Executed | 21 |
Total Time | 0.0008629 seconds |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
0 | 0 | 0 | 0s | 0s | BEGIN | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | append | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | get_node | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | get_nodelist | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | iterator | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | new | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | new_from_ref | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | pop | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | prepend | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | push | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | shift | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | size | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | string_value | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | to_boolean | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | to_literal | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | to_number | XML::LibXML::NodeList::
0 | 0 | 0 | 0s | 0s | unshift | XML::LibXML::NodeList::
Line | Stmts. | Exclusive Time | Avg. | Code |
---|---|---|---|---|
1 | # $Id: NodeList.pm 709 2008-01-29 21:01:32Z pajas $ | |||
2 | ||||
3 | package XML::LibXML::NodeList; | |||
4 | 3 | 28µs | 9µs | use strict; # spent 12µs making 1 call to strict::import |
5 | 3 | 108µs | 36µs | use XML::LibXML::Boolean; # spent 8µs making 1 call to import |
6 | 3 | 26µs | 9µs | use XML::LibXML::Literal; # spent 9µs making 1 call to import |
7 | 3 | 26µs | 9µs | use XML::LibXML::Number; # spent 8µs making 1 call to import |
8 | ||||
9 | 3 | 57µs | 19µs | use vars qw ($VERSION); # spent 29µs making 1 call to vars::import |
10 | 1 | 700ns | 700ns | $VERSION = "1.66"; # VERSION TEMPLATE: DO NOT CHANGE |
11 | ||||
12 | use overload | |||
13 | 1 | 16µs | 16µs | '""' => \&to_literal, # spent 53µs making 1 call to overload::import |
14 | 'bool' => \&to_boolean, | |||
15 | 2 | 590µs | 295µs | ; |
16 | ||||
17 | sub new { | |||
18 | my $class = shift; | |||
19 | bless [@_], $class; | |||
20 | } | |||
21 | ||||
22 | sub new_from_ref { | |||
23 | my ($class,$array_ref,$reuse) = @_; | |||
24 | return bless $reuse ? $array_ref : [@$array_ref], $class; | |||
25 | } | |||
26 | ||||
27 | sub pop { | |||
28 | my $self = CORE::shift; | |||
29 | CORE::pop @$self; | |||
30 | } | |||
31 | ||||
32 | sub push { | |||
33 | my $self = CORE::shift; | |||
34 | CORE::push @$self, @_; | |||
35 | } | |||
36 | ||||
37 | sub append { | |||
38 | my $self = CORE::shift; | |||
39 | my ($nodelist) = @_; | |||
40 | CORE::push @$self, $nodelist->get_nodelist; | |||
41 | } | |||
42 | ||||
43 | sub shift { | |||
44 | my $self = CORE::shift; | |||
45 | CORE::shift @$self; | |||
46 | } | |||
47 | ||||
48 | sub unshift { | |||
49 | my $self = CORE::shift; | |||
50 | CORE::unshift @$self, @_; | |||
51 | } | |||
52 | ||||
53 | sub prepend { | |||
54 | my $self = CORE::shift; | |||
55 | my ($nodelist) = @_; | |||
56 | CORE::unshift @$self, $nodelist->get_nodelist; | |||
57 | } | |||
58 | ||||
59 | sub size { | |||
60 | my $self = CORE::shift; | |||
61 | scalar @$self; | |||
62 | } | |||
63 | ||||
64 | sub get_node { | |||
65 | # uses array index starting at 1, not 0 | |||
66 | # this is mainly because of XPath. | |||
67 | my $self = CORE::shift; | |||
68 | my ($pos) = @_; | |||
69 | $self->[$pos - 1]; | |||
70 | } | |||
71 | ||||
72 | 1 | 1µs | 1µs | *item = \&get_node; |
73 | ||||
74 | sub get_nodelist { | |||
75 | my $self = CORE::shift; | |||
76 | @$self; | |||
77 | } | |||
78 | ||||
79 | sub to_boolean { | |||
80 | my $self = CORE::shift; | |||
81 | return (@$self > 0) ? XML::LibXML::Boolean->True : XML::LibXML::Boolean->False; | |||
82 | } | |||
83 | ||||
84 | # string-value of a nodelist is the string-value of the first node | |||
85 | sub string_value { | |||
86 | my $self = CORE::shift; | |||
87 | return '' unless @$self; | |||
88 | return $self->[0]->string_value; | |||
89 | } | |||
90 | ||||
91 | sub to_literal { | |||
92 | my $self = CORE::shift; | |||
93 | return XML::LibXML::Literal->new( | |||
94 | join('', grep {defined $_} map { $_->string_value } @$self) | |||
95 | ); | |||
96 | } | |||
97 | ||||
98 | sub to_number { | |||
99 | my $self = CORE::shift; | |||
100 | return XML::LibXML::Number->new( | |||
101 | $self->to_literal | |||
102 | ); | |||
103 | } | |||
104 | ||||
105 | sub iterator { | |||
106 | warn "this function is obsolete!\nIt was disabled in version 1.54\n"; | |||
107 | return undef; | |||
108 | } | |||
109 | ||||
110 | 1 | 10µs | 10µs | 1; |
111 | __END__ | |||
112 | ||||
113 | =head1 NAME | |||
114 | ||||
115 | XML::LibXML::NodeList - a list of XML document nodes | |||
116 | ||||
117 | =head1 DESCRIPTION | |||
118 | ||||
119 | An XML::LibXML::NodeList object contains an ordered list of nodes, as | |||
120 | detailed by the W3C DOM documentation of Node Lists. | |||
121 | ||||
122 | =head1 SYNOPSIS | |||
123 | ||||
124 | my $results = $dom->findnodes('//somepath'); | |||
125 | foreach my $context ($results->get_nodelist) { | |||
126 | my $newresults = $context->findnodes('./other/element'); | |||
127 | ... | |||
128 | } | |||
129 | ||||
130 | =head1 API | |||
131 | ||||
132 | =head2 new() | |||
133 | ||||
134 | You will almost never have to create a new NodeSet object, as it is all | |||
135 | done for you by XPath. | |||
136 | ||||
137 | =head2 get_nodelist() | |||
138 | ||||
139 | Returns a list of nodes, the contents of the node list, as a perl list. | |||
140 | ||||
141 | =head2 string_value() | |||
142 | ||||
143 | Returns the string-value of the first node in the list. | |||
144 | See the XPath specification for what "string-value" means. | |||
145 | ||||
146 | =head2 to_literal() | |||
147 | ||||
148 | Returns the concatenation of all the string-values of all | |||
149 | the nodes in the list. | |||
150 | ||||
151 | =head2 get_node($pos) | |||
152 | ||||
153 | Returns the node at $pos. The node position in XPath is based at 1, not 0. | |||
154 | ||||
155 | =head2 size() | |||
156 | ||||
157 | Returns the number of nodes in the NodeSet. | |||
158 | ||||
159 | =head2 pop() | |||
160 | ||||
161 | Equivalent to perl's pop function. | |||
162 | ||||
163 | =head2 push(@nodes) | |||
164 | ||||
165 | Equivalent to perl's push function. | |||
166 | ||||
167 | =head2 append($nodelist) | |||
168 | ||||
169 | Given a nodelist, appends the list of nodes in $nodelist to the end of the | |||
170 | current list. | |||
171 | ||||
172 | =head2 shift() | |||
173 | ||||
174 | Equivalent to perl's shift function. | |||
175 | ||||
176 | =head2 unshift(@nodes) | |||
177 | ||||
178 | Equivalent to perl's unshift function. | |||
179 | ||||
180 | =head2 prepend($nodeset) | |||
181 | ||||
182 | Given a nodelist, prepends the list of nodes in $nodelist to the front of | |||
183 | the current list. | |||
184 | ||||
185 | =head2 iterator() | |||
186 | ||||
187 | Will return a new nodelist iterator for the current nodelist. A | |||
188 | nodelist iterator is usefull if more complex nodelist processing is | |||
189 | needed. | |||
190 | ||||
191 | =cut |