XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
(Deleted User) Subject: Xquery filter by using contains
Author: (Deleted User)
Date: 26 Jun 2009 07:40 AM
Originally Posted: 26 Jun 2009 07:39 AM
Hi Stylussees,

I want to select values from an xml file where the tag $Request/Item_1/Item/@code contains a specific value. I have two questions regarding the syntax to use:

1. Question 1: The below example is working, but the one following it, where I search for DAB5_2_0'

for $Request in /eExact/Requests/Request return
if ($Request/Item_1/Item/@code[contains(.,'DAB5')]) then
$Request/Project/@code/string() else ()

for $Request in /eExact/Requests/Request return
if ($Request/Item_1/Item/@code[contains(.,'DAB5_2_0')]) then
$Request/Project/@code/string() else ()

2. Question 2: Apart from the value from question 1 I also want to check on tags where FreeNumber with number="2" is not empty.

<FreeNumbers>
<FreeNumber number="1" label="">3000</FreeNumber>
<FreeNumber number="2" label="">1</FreeNumber>
<FreeNumber number="3" label=""></FreeNumber>
<FreeNumber number="4" label=""></FreeNumber>
<FreeNumber number="5" label="">499</FreeNumber>
</FreeNumbers>

I tried this, but I am not sure how to specifically target freenumber 2.

Thanks,


Cynthia

Postnext
(Deleted User) Subject: Xquery filter by using contains
Author: (Deleted User)
Date: 26 Jun 2009 08:32 AM
Hi Cynthia,
1) there is no real difference (apart the value being searched) between the first and the second query; are you sure the data is present?

2) this should work: not(empty(FreeNumber[@number='2']))

Hope this helps,
Alberto

Postnext
(Deleted User) Subject: Xquery filter by using contains
Author: (Deleted User)
Date: 28 Jun 2009 03:20 AM
Hi Alberto,

Works like a charm, thanks. One other question though. If I want to test on two conditions being both true, how do I do that?

for $row in doc('file:///e:/Klanten/Cordaid/Conversie/Projectdoelen/040609/Exact_ProjectGoals_basis.xml')/root/row return
if (not(empty($row/PercNrGoods)) and ($row/Goal[contains(.,'4')])) then
concat($row/PrimaProjectID/text(),codepoints-to-string(10))
else ()

It is now returning values where one of the 2 conditions is met.

Thanks again,

Cynthia

Postnext
(Deleted User) Subject: Xquery filter by using contains
Author: (Deleted User)
Date: 29 Jun 2009 09:48 AM
Hi Cynthia,
the "and" operator only succeeds if both conditions are true; are you sure that only one is valid? Could you attach a sample of your data so we too can check on the result?

Thanks,
Alberto

Posttop
(Deleted User) Subject: Xquery filter by using contains
Author: (Deleted User)
Date: 29 Jun 2009 12:09 PM
Hi Alberto,

Double checked it and it turned out there were indeed records for which both statements were true. I checked to quickly at first, it turned out there was more then 1 record per project and I only looked at the first.

Oops and thanks again!


Cynthia

 
Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.