A single XPath 1.0 expression selecting what you want is not possible in the
general case.
However, if every element has a single attribute and if the elements are
sorted by the names of their attributes, then the following expressions do
what you need:
/*/*/@*[. = 'foo'][not(name() = name(../preceding-sibling::*[(_at_)*=
'foo'][1]/@*))]
selects
<NodeA name="foo"/>
<NodeB author="foo"/>
<NodeC reporter="foo"/>
and
/*/*/@*[. = 'larry'][not(name() = name(../preceding-sibling::*[(_at_)*=
'larry'][1]/@*))]
selects
<NodeA name="larry"/>
<NodeB author="larry"/>
=====
Cheers,
Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL
"Larry Hayashi" <larry_hayashi(_at_)hotmail(_dot_)com> wrote in message
news:Law15-F28cvIhkeTxtf00001e0c(_at_)hotmail(_dot_)com(_dot_)(_dot_)(_dot_)
I am trying to find all the attributes in an XML document that contain a
particular value.
Given the following data...
<ExampleData>
<NodeA name="foo"/>
<NodeA name="larry"/>
<NodeA name="foo"/>
<NodeB author="foo"/>
<NodeB author="larry"/>
<NodeC reporter="foo"/>
</ExampleData>
I would like to write an XPATH statement that returns this:
<NodeA name="foo"/>
<NodeB author="foo"/>
<NodeC reporter="foo"/>
Note that I am only returning UNIQUE instances of element/attribute
combinations with the attribute value.
Is this possible using XPATH?
Thanks!
Larry
_________________________________________________________________
Help STOP SPAM with the new MSN 8 and get 2 months FREE*
http://join.msn.com/?page=features/junkmail
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list