Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / XML / March 2007

Tip: Looking for answers? Try searching our database.

Trouble with XPath query

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
tschulken - 15 Mar 2007 20:14 GMT
I have a query where i need to look for a value of a lower level xml
element based on the value of a parent element existing first. Here is
a simple example of the xml

<S3Client>
    <Buttons>
         <Button>Activity
              <RestrictedClientType>
                   <ClientType>02</ClientType>
              </RestrictedClientType>
         </Button>
              ...
    </Buttons>
</S3Client>

Here is my query, I am trying see if ClientType '02' exists when the
Button element has a value of "Activity". I wanted to do this in one
xpath query. Any help would be appreciated.
/Security/S3Client/Buttons[Button='Activity']/
RestrictedClientType[ClientType='02']

Tim
Bjoern Hoehrmann - 15 Mar 2007 22:21 GMT
* tschulken wrote in microsoft.public.dotnet.xml:
>I have a query where i need to look for a value of a lower level xml
>element based on the value of a parent element existing first. Here is
[quoted text clipped - 16 lines]
>/Security/S3Client/Buttons[Button='Activity']/
>RestrictedClientType[ClientType='02']

For example:

 //ClientType[ . = '02' and
   ancestor::Button[ normalize-space() = 'Activity' ]

or

 /S3Client/Buttons/Button[ normalize-space() = 'Activity' ]/
  RestrictedClientType/ClientType[ . = '02' ]

Your expression is basically correct, but you missed the space
characters in the <Button> element.
Signature

Björn Höhrmann · mailto:bjoern@hoehrmann.de · http://bjoern.hoehrmann.de
Weinh. Str. 22 · Telefon: +49(0)621/4309674 · http://www.bjoernsworld.de
68309 Mannheim · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/

tschulken - 16 Mar 2007 01:26 GMT
> * tschulken wrote in microsoft.public.dotnet.xml:
>
[quoted text clipped - 37 lines]
>
> - Show quoted text -

Bjorn,

That makes sense but it seems that I am having trouble getting it to
work. Since the <RestrictedClientType> was added as a child node of
Button, seems that the first part of my query doesn't work. I guess I
am used to parent nodes just having no values or maybe just attributes
but seems that since Button has a value of "Activity" and then the
child node, does querying for the Activity Text change? Here is an
example, before <RestrictedClientType> was added, this xpath query
would work fine:
_xmlDocument.SelectSingleNode( "/Security/S3Client/Buttons/
Button['Activity']" );

Now that query does not work, any ideas?

Thanks.

Tim
Bjoern Hoehrmann - 16 Mar 2007 02:30 GMT
* tschulken wrote in microsoft.public.dotnet.xml:
>> ><S3Client>
>> >     <Buttons>
[quoted text clipped - 6 lines]
>> >     </Buttons>
>> ></S3Client>

Here the content of the <Button> element is this:

 1. the word "Activity" followed by
    a line feed character followed by space characters
 2. the RestrictedClientType element
 3. a line feed character followed by space characters

I do not know whether the code above has been pretty printed for
readability, or whether it reflects what is actually in the tree
in memory, but assuming this is how it is in memory your original
... Button='Activity' ... would not work as that would match if
the content was just 'Activity'.

>That makes sense but it seems that I am having trouble getting it to
>work. Since the <RestrictedClientType> was added as a child node of
[quoted text clipped - 6 lines]
>_xmlDocument.SelectSingleNode( "/Security/S3Client/Buttons/
>Button['Activity']" );

I am not sure whether this is a typo, but this does not do what you
want at all. The string literal 'Activity' is converted to a boolean
(true) so this would select the first 'Button' element that has the
ancestors Buttons, S3Client, Security, in that order. You could also
write

 /Security/S3Client/Buttons/Button['HelloWorld']

and the result would be the same.

>Now that query does not work, any ideas?

I do not see a reason why this would happen.
Signature

Björn Höhrmann · mailto:bjoern@hoehrmann.de · http://bjoern.hoehrmann.de
Weinh. Str. 22 · Telefon: +49(0)621/4309674 · http://www.bjoernsworld.de
68309 Mannheim · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/

tschulken - 16 Mar 2007 13:40 GMT
> * tschulken wrote in microsoft.public.dotnet.xml:
>
[quoted text clipped - 50 lines]
> Weinh. Str. 22 · Telefon: +49(0)621/4309674 ·http://www.bjoernsworld.de
> 68309 Mannheim · PGP Pub. KeyID: 0xA4357E78 ·http://www.websitedev.de/

Bjorn,

Yes, what i had was a typo and I apologize. The xpath query should be
"/Security/S3Client/Buttons[Button='Activity']". This used to work for
all Button lookups and now that I added the Child Node for the
"Activity" button, it doesn't work on that one (but still works for
others since they don't have children). Is there a way for a single
query to be used for both scenarios?

Tim
tschulken - 16 Mar 2007 19:03 GMT
> > * tschulken wrote in microsoft.public.dotnet.xml:
>
[quoted text clipped - 63 lines]
>
> - Show quoted text -

Seems that having the child nodes alters the text for the Button so in
the case of the 'Activity' Button, its text is Activity02. Can I just
specify that I don't want to consider the child nodes text at this
point?

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.