Support for querying attributes using XPath.
This commit is contained in:
parent
d5569ead0b
commit
488000438b
|
@ -59,11 +59,7 @@ module Oga
|
||||||
nodes = XML::NodeSet.new
|
nodes = XML::NodeSet.new
|
||||||
|
|
||||||
context.each do |xml_node|
|
context.each do |xml_node|
|
||||||
# TODO: change this when attribute tests are implemented since those
|
nodes << xml_node if node_matches?(xml_node, node)
|
||||||
# are not XML::Element instances.
|
|
||||||
if xml_node.is_a?(XML::Element) and node_matches?(xml_node, node)
|
|
||||||
nodes << xml_node
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return nodes
|
return nodes
|
||||||
|
@ -111,6 +107,18 @@ module Oga
|
||||||
return nodes
|
return nodes
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def on_axis_attribute(node, context)
|
||||||
|
nodes = XML::NodeSet.new
|
||||||
|
|
||||||
|
context.each do |xml_node|
|
||||||
|
next unless xml_node.is_a?(XML::Element)
|
||||||
|
|
||||||
|
nodes += on_test(node, xml_node.attributes)
|
||||||
|
end
|
||||||
|
|
||||||
|
return nodes
|
||||||
|
end
|
||||||
|
|
||||||
def child_nodes(nodes)
|
def child_nodes(nodes)
|
||||||
children = XML::NodeSet.new
|
children = XML::NodeSet.new
|
||||||
|
|
||||||
|
|
|
@ -77,4 +77,43 @@ describe Oga::XPath::Evaluator do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'attribute axis' do
|
||||||
|
before do
|
||||||
|
document = parse('<a foo="bar"><b x="y"></b></a>')
|
||||||
|
@evaluator = described_class.new(document)
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'top-level attributes' do
|
||||||
|
before do
|
||||||
|
@set = @evaluator.evaluate('attribute::foo')
|
||||||
|
end
|
||||||
|
|
||||||
|
it_behaves_like :node_set, :length => 1
|
||||||
|
|
||||||
|
example 'return an Attribute instance' do
|
||||||
|
@set[0].is_a?(Oga::XML::Attribute).should == true
|
||||||
|
end
|
||||||
|
|
||||||
|
example 'return the correct attribute' do
|
||||||
|
@set[0].name.should == 'foo'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'nested attributes' do
|
||||||
|
before do
|
||||||
|
@set = @evaluator.evaluate('/a/attribute::x')
|
||||||
|
end
|
||||||
|
|
||||||
|
it_behaves_like :node_set, :length => 1
|
||||||
|
|
||||||
|
example 'return an Attribute instance' do
|
||||||
|
@set[0].is_a?(Oga::XML::Attribute).should == true
|
||||||
|
end
|
||||||
|
|
||||||
|
example 'return the correct attribute' do
|
||||||
|
@set[0].name.should == 'x'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue