Subject: RE: XPath to match attribute with multiple values...?
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 10 Nov 2004 19:05:30 -0000
|
In 2.0 if you have a schema that describes the attribute as list-valued then
contains(@categories, "business")
will do the right thing.
If you don't have a schema, then
contains(tokenize(@categories, '\s'), "business")
will do the right thing.
With 1.0, it's much harder.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Emmanouil Batsis [mailto:Emmanouil.Batsis@xxxxxxxxxxx]
> Sent: 10 November 2004 19:03
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: XPath to match attribute with multiple values...?
>
> Matt Dittbenner wrote:
>
> > Let me show another example.....
> >
> > <package name="product1" categories="personal small_business"/>
> > <package name="product2" categories="business enterprise" />
> >
> > In this example I want to match packages that belong to the
> category
> > "business" exclusively (not including small business). Using the
> > contains function will return both product1 and product2,
> which is not
> > the data I am looking for.
>
>
> Ahhhh, right; sorry for the too-quick reply. I guess you need
> to work a
> little more by matching the nodes with contains, then
> validating them in
> a template with the substring functions. Check out
>
> http://www.w3.org/TR/xpath#section-String-Functions
>
> for reference. Dunno if an extention exists for what you want (ie
> match-word or something), but i guess it checking out EXSLT would not
> take too much time.
>
> hth,
>
> Manos
>
> >
> > Thanks for such fast responses!
> >
> > Emmanouil Batsis wrote:
> >
> >> An attribute value is atomic. You can look whether it contains a
> >> substring using the contains(a, b) function. It will
> return true if a
> >> contains b.
> >>
> >> hth,
> >>
> >> MAnos
> >>
> >> Matt Dittbenner wrote:
> >>
> >>> Hey there,
> >>>
> >>> I am having trouble finding any information on this. I
> have some XML
> >>> data with an attribute that has a space-delimited list
> inside of it
> >>> (kind of like putting multiple classes on an element in
> html for use
> >>> by CSS). How can I use XPath to match the nodes with
> attributes that
> >>> contain a specific value. I think the best way to describe this
> >>> would be with an example:
> >>>
> >>> <data>
> >>> <item name="a" attribute="value value1"/>
> >>> <item name="b" attribute="value2 value1"/>
> >>> <item name="c" attribute="value1 value3"/>
> >>> <item name="d" attribute="value"/>
> >>> </data>
> >>>
> >>> If I want to match the elements where "attribute" has one of its
> >>> values "value1", I want item "a", item "b" and item "c". But if I
> >>> want the elements where "attribute" has one of its values
> "value", I
> >>> should get item "a" and item "d". If you use the
> contains() string
> >>> function, you would obviously match all items, which is
> not what I
> >>> want.
> >>>
> >>> As I said before CSS allows you to create styles that apply to a
> >>> class, and on your html, you can just set class="class1 class2
> >>> class3". That way ".class1", ".class2", ".class3", and
> >>> ".class1.class2" are all separate styles! I don't need
> this extent
> >>> of functionality, but it leads me to believe something like this
> >>> just might exist in XPath.
> >>>
> >>> Any ideas?
> >>>
> >>> Thanks in advance,
> >>> Matt
| Current Thread |
- <Possible follow-ups>
- George James - 10 Nov 2004 22:52:50 -0000
|
|