xsl-list
[Top] [All Lists]

RE: [xsl] Compound filter in for-each

2009-03-24 18:03:42
.... but if I do this:

<xsl:for-each 
select="Placemark/ExtendedData/Data[(_at_)name='rdb_status' and 
value='Endangered']">

I get no error, but also no data returned -even though there 
are matching values.

You haven't shown what you are doing inside the for-each - perhaps that's
where your error is.

How do you know you have now matched the values? What do you get for

count(Placemark/ExtendedData/Data[(_at_)name='rdb_status' and 
        value='Endangered'])

?
Michael Kay
http://www.saxonica.com/




Alan Hale wrote:
Wendell Piez wrote:
Alan,

At 02:47 PM 3/24/2009, you wrote:
Still working on XML derived from Google Earth KML. I 
want to filter on
particular ExtendedData/Data name and value combinations. 
Here is an
extract of relevant XML:
<Placemark>
..................
<ExtendedData>
         <Data name  "sciencName">
           <value>Euphrasia micrantha</value>
         </Data>
         <Data name  "grid_ref">
           <value>SN701822</value>
         </Data>
         <Data name  "eng_name">
           <value>An Eyebright</value>
         </Data>
         <Data name  "rdb_status">
           <value>Endangered</value>
         </Data>
.........................
</ExtendedData>
............................
</Placemark>
So I guess what I am looking for is something like:
<xsl:for-each select  "Placemark/ExtendedData/Data[(_at_)name  
'rdb_status'and value
'Endangered']">
- though this doesn't work (in XML Notepad I just get the 
unhelpful 
error message "Input string was not in a correct format.")

You might want


select="Placemark/ExtendedData/Data[(_at_)name='rdb_status'][.='End
angered']

which is effectively the same as

select="Placemark/ExtendedData/Data[(_at_)name='rdb_status' and 
.='Endangered']

But it's impossible to say absolutely without knowing more 
about what 
you haven't told us.

The "." in that expression is short for XPath 
"self::node()", which 
is to say a reference to the context node. So 
".='Endangered'" is a 
test for whether the context node of the evaluation (viz., 
each Data 
element selected by the path) has the string value "Endangered".

Whether you use one predicate with an "and" operator to join your 
tests, or two predicates, doesn't make any practical 
difference here.
Many thanksWendell

However I still get the same "Input string was not in a correct 
format" with XML Notepad, using either of your suggestions. 
I'm sorry 
I did not give sufficient background information. Happy to provide 
more but I'm not clear what type of further info might be needed.

I notice some "=" signs went missing in my XML example - I 
guess you 
realised this. Should be like this of course:

<Placemark>
..................
<ExtendedData>
        <Data name = "sciencName">
          <value>Euphrasia micrantha</value>
        </Data>
        <Data name = "grid_ref">
          <value>SN701822</value>
        </Data>
        <Data name = "eng_name">
          <value>An Eyebright</value>
        </Data>
        <Data name = "rdb_status">
          <value>Endangered</value>
        </Data>
.........................
</ExtendedData>
............................
</Placemark>




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>