Re: XPath Search
Brought to you by:
bs_php,
nigelswinson
From: Tod M. <tod...@gm...> - 2006-02-06 18:45:42
|
I've narrowed the problem down. When I search through keywords in the xml file (each component has one keyword tag with multiple words) it works fine using: $components=3D$xPath->match("//component[contains(keyword,'string')]"); but when I search through features (each component has multiple features) using: $components=3D$xPath->match("//component[contains(feature,'string')]"); I get an empty array. Do I have to do something different if there are multiple tags such as feature? On 2/6/06, Tod McIntyre <tod...@gm...> wrote: > > Can someone help me out? I can't seem to get the match working... > > I'm using: > $components=3D$xPath->match("//component[contains(feature,'string')]"); > which returns nothing in the array, even though "string" is in the file > > when I use : $components=3D$xPath->match("//*[contains(.,'string')]"); > however, it works. > > This isn't exactly ideal though as I just want to return the component > node itself that contains the "string" within the feature, not the actual > feature. > > Nigel, your solution of > $components=3D$xPath->match("//*[contains(feature,'string')]"); doesn't w= ork > either. It seems whenever I put the actual node name in the contains > function it doesn't work. > > Brad > > On 1/28/06, Nigel Swinson <nig...@us...> wrote: > > > > Try stuff like this: > > > > // Find all nodes that have a feature element that contains the word > > cabinet, case insensitively > > $aMatches =3D > > $Object->match("//*[contains(x-tolower(feature),'cabinet')]"); > > // Cycle through the nodes we find > > foreach ($aMatches as $Match) { > > // $Match will be something like /Product[1]/Component[3] > > echo $Object->getAttributes($Match.'/image', 'src'); > > echo $Object->wholeText($Match.'/title'); > > } > > > > Sorry it took so long to respond, I was hoping someone else on the list > > would beat me to it. > > > > Nigel > > > > ----- Original Message ----- > > *From:* Tod McIntyre <tod...@gm...> > > *To:* php...@li... > > *Sent:* Saturday, January 14, 2006 7:55 PM > > *Subject:* XPath Search > > > > I just found this class and it seems to offer exactly what I want. I'm > > new to it & xpath though so I'm slowly learning how to do things. I wa= nt to > > perform a search on my XML database for a string entered by a user. Sa= y for > > instance "cabinet". From this I want to search several XML files of th= e > > following structure: > > > > <?xml version=3D"1.0"?> > > <!DOCTYPE product PUBLIC "-//RYE//DTD IMAGEDB 1.0 Strict//EN" " > > component.dtd"> > > <product> > > <component id=3D"wall_cab"> > > <title>Wall Cabinet</title> > > <image src=3D"/images/cabinetry/wall_cab.jpg" /> > > <link href=3D"/products/cabinetry/wall.html" /> > > <feature>Sturdy double wall door </feature> > > <feature>Door has perforated inside wall for hanging hooks for tools > > etc</feature> > > <feature>Solid steel construction 20-Gauge (.036") thick </feature> > > <feature>One shelf included 24" x 10" x 0.6" </feature> > > <keywords>tools sports sporting </keywords> > > </component> > > <component id=3D"component2"> > > ... > > </component> > > </product> > > > > I have added keywords to enhance the search functionality. What I want > > to do is extract the title, image, and link of any product that contain= s, in > > any tag, the string entered by the user. > > > > I'm not exactly sure how to do this. > > > > Can someone point me in the right direction? I know it's asking a lot, > > but even a quick pointer would help me out. I'm not a very experienced= php > > programmer > > . > > Thanks very much, > > > > Brad > > > > > |