RE: [xsl] XPath problem

Subject: RE: [xsl] XPath problem
From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx>
Date: Thu, 20 Dec 2001 14:16:19 -0000
> I have my XML as follows
>
> <records>
>      <record1 type="type1">
>           <field1 value="xyz">
>      </record1>
>
>      <record1 type = "type2">
>      </record1>
> </records>
>
> If I am looking for an element which does not happen to be an
> attribute my
> logic below works fine in getting the nearest "@type" value
> on the ancestor
> axis.
>
> NodeList nl = XPathAPI.eval(root,
> //xs:field1,prefixResolver).nodelist()
> and then for each Node instance I can get the nearest "@type" value by
> doing something like this

There are quite a few XPath APIs around now that are confusingly similar, it
would help if you told us which one you were using.
>
>  XObject obj = XPathAPI.eval(currentRecord1Node,"ancestor::
> *[@type][1]/@*[name()='type']",prefixResolver);

Why do you write "/*[name()='type']" rather than "/@type"?

>  String result = obj.toString();
>
> I run into problem when what I am looking happens to be an
> Attribute e,g
> "value". So, if my "currentRecord1Node" is for this attribute element
> "value", I am loosing my Node structure information and I am
> unable to get
> to the nearest "@type" value.

Your terminology is way out (there is no such thing as an attribute element,
I think you mean an attribute node). But I can't see any reason why the
above expression shouldn't work just because the current node is an
attribute: attributes have ancestors jsut as elements do.

Mike Kay


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread