phpxpath-users Mailing List for Php.XPath
Brought to you by:
bs_php,
nigelswinson
You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(346) |
Nov
(8) |
Dec
(21) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(30) |
Feb
(13) |
Mar
|
Apr
(3) |
May
(70) |
Jun
(26) |
Jul
(48) |
Aug
(22) |
Sep
(1) |
Oct
(4) |
Nov
|
Dec
|
2003 |
Jan
(3) |
Feb
(3) |
Mar
(11) |
Apr
(3) |
May
(4) |
Jun
(3) |
Jul
(2) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
(2) |
2004 |
Jan
(4) |
Feb
(2) |
Mar
(2) |
Apr
(2) |
May
|
Jun
|
Jul
(12) |
Aug
(8) |
Sep
(2) |
Oct
(2) |
Nov
(3) |
Dec
|
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(2) |
Sep
|
Oct
(1) |
Nov
(1) |
Dec
|
2006 |
Jan
(3) |
Feb
(7) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
From: zhang l. <ob...@gm...> - 2010-10-05 13:27:16
|
In version 3.5 .The xml parser will remove all CDATA tag ,and can not be restored.For example,import from a xml file,and then export to a new file ,the new file will lost all CDATA tag. how to keep these tags while parsing? |
From: Nigel S. <nig...@us...> - 2006-02-20 23:19:08
|
> Sorry for writing directly to you, but I am in quite a hurry. > First thank you for your nice project. If you are in a hurry, then you are better to post to phpxpath-users, as = that way it won't be just me who sees your questions. > Now my problem: I use your class and I am not getting the > right data. > It outputs the data, but it is still in a <![CDATA[ ]]> part. > You could find an example here: > http://cocaman.ch/schulung/xml/xpath-test.php >=20 > Should I replace the cdata stuff by myself? Or do I have > misconfigured something with PHP.Xpath? The short answer is that you'll have to deal with it yourself. =20 For the long answer, search in the code for these symbols to see a full = description of the problems: - parsInCData - xml_set_default_handler - xml_set_character_data_handler - _translateAmpersand CData caused parsing problems, and as such it's structure is not stored, = rather it is treated as part of the containing textnode. You might be = able to "formally" remove the <!CDATA[ ]]> parts passing the string you = get back from wholeText() through the xml parser, but you'd have to wrap = it in <> stuff in order to make your string a valid xml document. Nigel |
From: Tod M. <tod...@gm...> - 2006-02-13 17:45:44
|
I'll try it out. Thanks again! Brad On 2/10/06, Nigel Swinson <nig...@us...> wrote: > > Returns a list of features: > //feature[contains(.,'search string')] > > Returns a list of components > //feature[contains(.,'search string')]/.. > > The trailing /.. is no accident. It filters duplicates too > > Nigel > > ----- Original Message ----- > *From:* Tod McIntyre <tod...@gm...> > *To:* Nigel Swinson <nig...@us...> > *Cc:* php...@li... > *Sent:* Friday, February 10, 2006 8:07 PM > *Subject:* Re: XPath Search > > excellent... very thorough! Now, my only question is... once I hav= e > a list of all the features that match a particular phrase, along with > keywords etc. I want to then get the component that that feature belongs > to. I'm not exactly sure how to get the parent. I tried some of XPath t= he > axis fcn's such as "parent::feature", to no avail. I'm not even really s= ure > what the exact syntax is in order to get this to work anyway. Can someon= e > tell me how to get the component element of the feature that matches. Th= en > all I need to do is eliminate duplicates and I'm set! > > Thanks again for all the help, > > Brad > > On 2/7/06, Nigel Swinson <nig...@us...> wrote: > > > > 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 wo= rks > > 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? > > > > Worked it out. When you search for //component[contains(feature,'strin= g')], > > then it first of all evaluates //component to get a list of context > > nodes, which will be something like: > > > > XPathSet:Array > > ( > > [0] =3D> /product[1]/component[1] > > [1] =3D> /product[1]/component[6] > > ) > > > > Then it filters the list based on the predicate, which is the > > contains(feature,'string') bit. But to do this, it needs to evaluate > > the "feature" for each of the context nodes. But for the first context= node > > this returns something like: > > > > Array > > ( > > [0] =3D> /product[1]/component[1]/feature[1] > > [1] =3D> /product[1]/component[1]/feature[2] > > [2] =3D> /product[1]/component[1]/feature[3] > > [3] =3D> /product[1]/component[1]/feature[4] > > ) > > > > So the LHS is an array, and the RHS is a string. According to > > http://www.w3.org/TR/xpath#function-string, the contains function will > > convert the LHS to a string by "A node-set is converted to a string by > > returning the string-value <http://www.w3.org/TR/xpath#dt-string-value>= of the node in the node-set that is first in document > > order <http://www.w3.org/TR/xpath#dt-document-order> . If the node-set > > is empty, an empty string is returned.". And thus it will take the tex= t > > part of /product[1]/component[1]/feature[1], and ignore the rest. > > > > This explains why it works for the keyword, as you only have one > > keyword. > > > > Instead of finding all components, and then filtering the list, instead > > we should find all features, and then go back up a level to get their o= wning > > components. So we do: > > > > //feature[contains(.,'search string')]/.. > > > > Nigel > > > > |
From: Nigel S. <nig...@us...> - 2006-02-11 02:03:16
|
Returns a list of features: //feature[contains(.,'search string')] =20 Returns a list of components //feature[contains(.,'search string')]/.. The trailing /.. is no accident. It filters duplicates too Nigel ----- Original Message -----=20 From: Tod McIntyre=20 To: Nigel Swinson=20 Cc: php...@li...=20 Sent: Friday, February 10, 2006 8:07 PM Subject: Re: XPath Search excellent... very thorough! Now, my only question is... once I = have a list of all the features that match a particular phrase, along = with keywords etc. I want to then get the component that that feature = belongs to. I'm not exactly sure how to get the parent. I tried some = of XPath the axis fcn's such as "parent::feature", to no avail. I'm not = even really sure what the exact syntax is in order to get this to work = anyway. Can someone tell me how to get the component element of the = feature that matches. Then all I need to do is eliminate duplicates and = I'm set! Thanks again for all the help, Brad On 2/7/06, Nigel Swinson <nig...@us...> wrote: 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? Worked it out. When you search for = //component[contains(feature,'string')], then it first of all evaluates = //component to get a list of context nodes, which will be something = like: XPathSet:Array ( [0] =3D> /product[1]/component[1] [1] =3D> /product[1]/component[6] ) Then it filters the list based on the predicate, which is the = contains(feature,'string') bit. But to do this, it needs to evaluate = the "feature" for each of the context nodes. But for the first context = node this returns something like: Array ( [0] =3D> /product[1]/component[1]/feature[1] [1] =3D> /product[1]/component[1]/feature[2] [2] =3D> /product[1]/component[1]/feature[3] [3] =3D> /product[1]/component[1]/feature[4] ) So the LHS is an array, and the RHS is a string. According to = http://www.w3.org/TR/xpath#function-string, the contains function will = convert the LHS to a string by "A node-set is converted to a string by = returning the string-value of the node in the node-set that is first in = document order . If the node-set is empty, an empty string is = returned.". And thus it will take the text part of = /product[1]/component[1]/feature[1], and ignore the rest. This explains why it works for the keyword, as you only have one = keyword. Instead of finding all components, and then filtering the list, = instead we should find all features, and then go back up a level to get = their owning components. So we do: //feature[contains(.,'search string')]/.. Nigel |
From: Tod M. <tod...@gm...> - 2006-02-10 20:07:07
|
excellent... very thorough! Now, my only question is... once I have = a list of all the features that match a particular phrase, along with keyword= s etc. I want to then get the component that that feature belongs to. I'm not exactly sure how to get the parent. I tried some of XPath the axis fcn's such as "parent::feature", to no avail. I'm not even really sure wha= t the exact syntax is in order to get this to work anyway. Can someone tell me how to get the component element of the feature that matches. Then all = I need to do is eliminate duplicates and I'm set! Thanks again for all the help, Brad On 2/7/06, Nigel Swinson <nig...@us...> wrote: > > I've narrowed the problem down. When I search through keywords in the xm= l > file (each component has one keyword tag with multiple words) it works fi= ne > 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? > > Worked it out. When you search for //component[contains(feature,'string'= )], > then it first of all evaluates //component to get a list of context nodes= , > which will be something like: > > XPathSet:Array > ( > [0] =3D> /product[1]/component[1] > [1] =3D> /product[1]/component[6] > ) > > Then it filters the list based on the predicate, which is the > contains(feature,'string') bit. But to do this, it needs to evaluate the > "feature" for each of the context nodes. But for the first context node > this returns something like: > > Array > ( > [0] =3D> /product[1]/component[1]/feature[1] > [1] =3D> /product[1]/component[1]/feature[2] > [2] =3D> /product[1]/component[1]/feature[3] > [3] =3D> /product[1]/component[1]/feature[4] > ) > > So the LHS is an array, and the RHS is a string. According to > http://www.w3.org/TR/xpath#function-string, the contains function will > convert the LHS to a string by "A node-set is converted to a string by > returning the string-value <http://www.w3.org/TR/xpath#dt-string-value> o= f > the node in the node-set that is first in document order<http://www.w3.or= g/TR/xpath#dt-document-order>. > If the node-set is empty, an empty string is returned.". And thus it wil= l > take the text part of /product[1]/component[1]/feature[1], and ignore the > rest. > > This explains why it works for the keyword, as you only have one keyword. > > Instead of finding all components, and then filtering the list, instead w= e > should find all features, and then go back up a level to get their owning > components. So we do: > > //feature[contains(.,'search string')]/.. > > Nigel > |
From: Nigel S. <nig...@us...> - 2006-02-07 22:43:11
|
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? Worked it out. When you search for = //component[contains(feature,'string')], then it first of all evaluates = //component to get a list of context nodes, which will be something = like: XPathSet:Array ( [0] =3D> /product[1]/component[1] [1] =3D> /product[1]/component[6] ) Then it filters the list based on the predicate, which is the = contains(feature,'string') bit. But to do this, it needs to evaluate = the "feature" for each of the context nodes. But for the first context = node this returns something like: Array ( [0] =3D> /product[1]/component[1]/feature[1] [1] =3D> /product[1]/component[1]/feature[2] [2] =3D> /product[1]/component[1]/feature[3] [3] =3D> /product[1]/component[1]/feature[4] ) So the LHS is an array, and the RHS is a string. According to = http://www.w3.org/TR/xpath#function-string, the contains function will = convert the LHS to a string by "A node-set is converted to a string by = returning the string-value of the node in the node-set that is first in = document order. If the node-set is empty, an empty string is returned.". = And thus it will take the text part of = /product[1]/component[1]/feature[1], and ignore the rest. This explains why it works for the keyword, as you only have one = keyword. Instead of finding all components, and then filtering the list, instead = we should find all features, and then go back up a level to get their = owning components. So we do: //feature[contains(.,'search string')]/.. Nigel |
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 > > > > > |
From: Tod M. <tod...@gm...> - 2006-02-06 18:34:21
|
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 wor= k 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 want= to > perform a search on my XML database for a string entered by a user. Say = for > instance "cabinet". From this I want to search several XML files of the > 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 t= o > do is extract the title, image, and link of any product that contains, 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 p= hp > programmer > . > Thanks very much, > > Brad > > |
From: Nigel S. <nig...@us...> - 2006-01-29 03:11:57
|
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 -----=20 From: Tod McIntyre=20 To: php...@li...=20 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 = want to perform a search on my XML database for a string entered by a = user. Say for instance "cabinet". From this I want to search several = XML files of the following structure:=20 <?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>=20 <feature>Door has perforated inside wall for hanging hooks for = tools etc</feature>=20 <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>=20 <component id=3D"component2"> ... </component> =20 </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 = contains, in any tag, the string entered by the user. I'm not exactly sure how to do this.=20 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 |
From: Tod M. <tod...@gm...> - 2006-01-14 19:55:45
|
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 want to perform a search on my XML database for a string entered by a user. Say fo= r instance "cabinet". From this I want to search several XML files of the following structure: <?xml version=3D"1.0"?> <!DOCTYPE product PUBLIC "-//RYE//DTD IMAGEDB 1.0 Strict//EN" "component.dt= d "> <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 contains, 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 |
From: Nigel S. <nig...@us...> - 2006-01-09 22:31:57
|
Hi Nigel: I'm analizing your class XPath in order to include it in my app.... i = think it's the most accurate i've ever seen. It's dynamic, flexible, = portable,... the best one. :o) I have a couple of question that i would thank you if you can answer = them as soon as possible: - If I would like to take only the nodes that apply to the XPath = Expression directly, what i have to call or use? You'd call match() which will (probably) return you a set of nodes. - What if the XML has sintax errors? importFromFile() or importFromString() will fail. Why don't you try it = out and you'll see what happens. - Is there any script recommended to validate or tidy a XHTML string = without using PHP extensions? Best regards, Probably. But don't have any relevant advice to offer. Sorry! Nigel |
From: Nigel S. <nig...@us...> - 2005-11-30 22:32:13
|
You've found a bug, thanks! So now you have two choices: 1) Get the latest version (153) from cvs which has a fix for the issue 2) Use setAttribute() instead Cheers Nigel =20 ----- Original Message -----=20 From: "Rien Swagerman" <ri...@re...> To: <nig...@us...> Sent: Monday, November 28, 2005 12:24 PM Subject: quick question Php.Xpath > I'm trying to insert/replace an attribute value like this: >=20 > $this->xPath->insertData("/bananalbum[1]/album[1]/slide[1][@label]", > "newlabelstring"); >=20 > The documentation says unde insertData: >=20 > "Insert a sub string in a text-part OR attribute-value." >=20 > How can i insert an attribute value with the insertData function? >=20 >=20 > <bananalbum> > <album label=3D"album1" layout=3D"self"> > <slide label=3D"name11"> > <label>Situatiex</label> > <txt>text here! vxvxvxvxv</txt> > <date>2005.07.03 17:29:23</date> > <filesize>0.43Mbytes</filesize> > <format>JPEG</format> > <size>138mm x 86mm</size> > <image width=3D"780" height=3D"487">487</image> > <thumb width=3D"137" height=3D"86">3000</thumb> > </slide> >=20 >=20 >=20 > Thanx > Rien. > |
From: Jimmy z. <cra...@co...> - 2005-10-16 16:44:55
|
I am pleased to announce that both Java and C version 1.0 of VTD-XML -- an open-source, high-performance and non-extractive XML processing API -- is freely available on sourceforge.net. For source code, documentation, detailed description of API and code examples, please visit http://vtd-xml.sourceforge.net New in VTD-XML 1.0 is the integrated support of XPath that also features a easy-to-use interface that further enhances VTD-XML's inherent benefits, such as CPU/memory efficiency, random access, and incremental update. A demo of the XPath capability is available at http://vtd-xml.sourceforge.net/demo.html For further reading, please refer to the following articles about VTD-XML * Process SOAP with VTD-XML http://xml.sys-con.com/read/48764.htm * Better, faster XML processing with VTD-XML http://www.devx.com/xml/Article/22219?trk=DXRSS_XML * XML on a chip http://www.xml.com/pub/a/2005/03/09/chip.html * Improve XML processing with VTD-XML http://www.intel.com/cd/ids/developer/asmo-na/eng/dc/xeon/multicore/211657.htm |
From: J. C. <jan...@im...> - 2005-08-29 21:55:13
|
Hi I have used PhpXpath to create an Web-based XML Editor some time ago. This is some part of it and it might be the code you are looking for. (especially case "UP" and case "DOWN") Cheers Jan require_once("include/XPath.class.php"); $xpath=new XPath($f_dir.$file."_web.xml"); /* $xpath=new XPath(); $xpath->setSkipWhiteSpaces(); $xpath->importFromFile($f_dir.$file."_web.xml"); */ // AKTIONS: if(isset($_POST["aktion"])){ $path=$_POST["lokation_id"]; $target_path=$_POST["target_path"]; switch($_POST["aktion"]){ case "DEL": $xpath->removeChild($path,true); $pos=strrpos($path,"/"); //echo $path; $path=substr($path,0,$pos); //echo $path; break; case "NEU": if ($_POST["exelmode"]=="true"){ //Exelmodus: $namen=split("\r\n",$_POST["atarea"]); $first=true; foreach($namen as $name){ if ($name=="") continue; if($first){ $path_temp=$xpath->appendChild($path,"<data name=\"".$name."\">".$_POST["text_entry"]."</data>"); $first=false; }else $xpath->appendChild($path,"<data name=\"".$name."\">".$_POST["text_entry"]."</data>"); } $path=$path_temp; }else //normal new entry $path=$xpath->appendChild($path,"<data name=\"".$_POST["bezeichnung"]."\">".$_POST["text_entry"]."</data>"); break; case "EDIT": $xpath->setAttribute($path,"name",$_POST["bezeichnung"]); $xpath->replaceData($path,$_POST["text_entry"]); break; case "CLONE": $clonedNode=&$xpath->cloneNode($path,FALSE); $xpath->insertBefore($path, $clonedNode,true,true); break; case "PASTE_INTO": $clonedNode=&$xpath->cloneNode($target_path,FALSE); //echo "Clone: ".$path."<br>"; //echo "nach: ".$target_path."<br>"; //$target_path=$xpath->appendData($target_path,"<neu/>"); $path_temp=$xpath->appendChild($path, $clonedNode, FALSE, TRUE); // insert here /* $target_path=$xpath->appendChild($target_path,"<neu/>"); //$path=$xpath->insertChild($target_path, $clonedNode, TRUE, FALSE, TRUE); // insert here $xpath->insertBefore($target_path."/neu[1]", $clonedNode, FALSE, TRUE); // insert here //$xpath->removeChild($target_path, FALSE); // -> take away */ break; case "UP": $clonedNode=&$xpath->cloneNode($path,FALSE); // -> duplicate $xpath->removeChild($path, FALSE); // -> take away $xpath->insertBefore($target_path, $clonedNode, FALSE, TRUE); // insert here $path=$target_path; break; case "DOWN": if ($_POST["toolkit"]=="append"){ // node append to parent node (it is last element) $clonedNode=&$xpath->cloneNode($path,FALSE); // -> duplicate $path_temp=$xpath->appendChild($target_path, $clonedNode, FALSE, TRUE); // insert here //echo $path_temp."<br>"; $xpath->removeChild($path, TRUE); // -> take away $pos1=strrpos($path_temp,"["); $pos2=strrpos($path_temp,"]")-1; $pos=substr($path_temp,$pos1+1,strlen($path_temp)-$pos2); $path=substr($path_temp,0,$pos1)."[".($pos-1)."]"; }else{ $clonedNode=&$xpath->cloneNode($target_path,FALSE); // -> duplicate //echo "remove:".$path."<br>"; $xpath->removeChild($target_path, FALSE); // -> take away //echo "insert before:".$path."<br>"; $xpath->insertBefore($path, $clonedNode, FALSE,TRUE); // insert here $path=$target_path; } break; } // echo $path; //node to be selected // die Datei abspeichern... copy($f_dir.$file."_web.xml",$f_dir."/backup/".time()."_".$file."_web.xml"); $xpath->exportToFile($f_dir.$file."_web.xml",'','<?xml version="1.0" encoding="iso-88591"'.'?'.'>'); //schreiben } -----Ursprüngliche Nachricht----- Von: php...@li... [mailto:php...@li...]Im Auftrag von Nigel Swinson Gesendet: Montag, 29. August 2005 22:26 An: php...@li... Cc: Suzanne Slatcher Betreff: Fw: xpath getNode problem ----- Original Message ----- From: Suzanne Slatcher To: nig...@us... Sent: Tuesday, August 23, 2005 7:47 PM Subject: xpath getNode problem Hi Nigel Firstly I should thank you for php.xpath. Without it I don't think I could have done what I was trying to do. But there's one thing I can't quite work out - I have a structure like this to store notes hierarchically: <NOTES> <NOTE id="1"><HEAD>heading 1</HEAD><KIDS></KIDS></NOTE> <NOTE id="2"><HEAD>heading 2</HEAD><KIDS> <NOTE id="3"><HEAD>heading 3</HEAD><KIDS></KIDS></NOTE> </KIDS></NOTE> <NOTE id="4"><HEAD>heading 4</HEAD><KIDS></KIDS></NOTE> </NOTES> and what I'd like to do is move 'NOTE 2', along with the contents of it's KIDS (ie 'NOTE 3') to the KIDS scope of 'NOTE 1' I'm assuming I'd have to store 'NOTE 2' as a variable, then delete it from the document, then re-insert it in the new place, but I'm having problems storing it in a variable. I've tried various combinations of getNode, eg: $note[] = $x->getNode('/NOTES[1]/NOTE[2]'); but I must be missing something as print_r($note); is always empty how would you suggest I go about this? thankyou very much for your time Suzanne -- s p a r k h i v e hold that thought www.sparkhive.com |
From: Nigel S. <nig...@us...> - 2005-08-29 20:24:45
|
=20 ----- Original Message -----=20 From: Suzanne Slatcher=20 To: nig...@us...=20 Sent: Tuesday, August 23, 2005 7:47 PM Subject: xpath getNode problem Hi Nigel Firstly I should thank you for php.xpath. Without it I don't think I = could have done what I was trying to do. But there's one thing I can't quite work out -=20 I have a structure like this to store notes hierarchically: <NOTES> <NOTE id=3D"1"><HEAD>heading 1</HEAD><KIDS></KIDS></NOTE> <NOTE id=3D"2"><HEAD>heading 2</HEAD><KIDS> <NOTE id=3D"3"><HEAD>heading 3</HEAD><KIDS></KIDS></NOTE> </KIDS></NOTE> <NOTE id=3D"4"><HEAD>heading 4</HEAD><KIDS></KIDS></NOTE> </NOTES> and what I'd like to do is move 'NOTE 2', along with the contents of = it's KIDS (ie 'NOTE 3') to the KIDS scope of 'NOTE 1'=20 I'm assuming I'd have to store 'NOTE 2' as a variable, then delete it = from the document, then re-insert it in the new place, but I'm having = problems storing it in a variable. I've tried various combinations of getNode, eg: $note[] =3D $x->getNode('/NOTES[1]/NOTE[2]'); but I must be missing something as print_r($note); is always empty how would you suggest I go about this? thankyou very much for your time Suzanne --=20 s p a r k h i v e hold that thought www.sparkhive.com |
From: Robert W. <rob...@gm...> - 2005-07-13 10:23:57
|
hi, i have to update a very old phpxpath version. now some problems occured. when using getData(), every text node containing CDATA is returned with the CDATA statement in it. the CHANGES file says: >Version 2.2 - 2nd February 2002 >CData support started You can now losslessly import and >export CDATA in and out of the class. is there a function that removes the CDATA stuff? if not, i think it's quite annoying, that everybody had to write his own function to do that. cheers, robert |
From: Nigel S. <nig...@us...> - 2004-11-13 11:21:47
|
Indeed! Thanks. Have renamed the references to getAttribute() to = getAttributes(). Cheers Nigel =20 ----- Original Message -----=20 From: "Andrej Arn" <aa...@ap...> To: <php...@li...> Sent: Friday, November 12, 2004 12:05 AM Subject: PHP.XPath getAttribute() missing > hello nigel, everyone >=20 > there are setAttribute(), setAttributes() and getAttributes(). > there are references to getAttribute(). but the method itself is = missing. > i've checked the newest 3.5 version (working with 3.3) >=20 > add it or remove the references? >=20 > greetings > andrej |
From: Andrej A. <aa...@ap...> - 2004-11-12 00:06:12
|
hello nigel, everyone there are setAttribute(), setAttributes() and getAttributes(). there are references to getAttribute(). but the method itself is missing. i've checked the newest 3.5 version (working with 3.3) add it or remove the references? greetings andrej |
From: <tw...@ks...> - 2004-11-07 14:30:17
|
Hi I have a few problems with my script when running it on a server with PHP= 5. First -- encoding. Somehow the initial processing instruction=20 disappears. I have a header: <?xml version=3D'1.0' encoding=3D'iso-8859-1= '?>=20 when I run the exportAsXml method, the header is the default <?xml=20 version=3D'1.0'?>. This is not a big issue, since I can just specify the=20 correct header to use when exporting. Second -- CDATA-tags disappear. In 4.x I have to manually strip the=20 enclosing <![CDATA[ ... ]]> marks on my text. Apparently that is no=20 longer necessary in 5.0. Nice, but when I export my xml-document the=20 CDATA tags are also missing. This results in the parser breaking down=20 when I try to read in the xml document after exporting it. Has anyone experienced the same and found a usable workaround for the=20 CDATA issue? Best regards, Torben W=F6lm |
From: Peter R. <php...@pe...> - 2004-10-07 07:55:34
|
On Wednesday 06 October 2004 13:47, ac sandeep wrote: > I am having trouble parsing a large file as it is in excess of 12Mb. If i > use a small file like 500Kb then it works fine but if i use a large file > the script dies saying memory limit exceeded. > > I have also tried to increase this limit to 32Mb but the result is the > same. > > Any ideas how i can go about doing this. redesign your system? ;-) I've not tried using phpxpath with such a large file but because it reads the whole document in every time not only will it require lots of memory it's likely to be very slow too. And because php is stateless it has to do it for each request. Depending on the number of users your memory usage and response times could be enormous. It all sounds hugely inefficient to me. I would be thinking in terms of splitting the data up, perhaps storing it in an rdbms and using phpxpath as a front end. |
From: ac s. <ac_...@ho...> - 2004-10-06 12:48:13
|
hi, I am having trouble parsing a large file as it is in excess of 12Mb. If i use a small file like 500Kb then it works fine but if i use a large file the script dies saying memory limit exceeded. I have also tried to increase this limit to 32Mb but the result is the same. Any ideas how i can go about doing this. Thanks and regards A C Sandeep _________________________________________________________________ Millions of eligible singles. http://www.bharatmatrimony.com/cgi-bin/bmclicks1.cgi?74 Find the perfect match on BharatMatrimony.com |
From: SourceForge.net <no...@so...> - 2004-09-16 07:39:59
|
Read and respond to this message at: https://sourceforge.net/forum/message.php?msg_id=2761638 By: xlhostis I have à memory pb using ImportFromString using with xml syntax like this : <ENVELOPPE> <UC>UBGDS_ANIMAL_DEC_GAR_BVD</UC> <CODORG>G350</CODORG> <IDEEVT>20040906122713</IDEEVT> <COPAIP>FR</COPAIP> <NUNATI>0103027771</NUNATI> <GARANTIE> <DADEGA>15/04/04</DADEGA> <CAUGAR>VNG</CAUGAR> </GARANTIE> </ENVELOPPE> The memory is not liberated after each ImportFromString so with 10000 <ENVELOPPE> the memory allowed to php is exhausted. Any idea ? ______________________________________________________________________ You are receiving this email because you elected to monitor this forum. To stop monitoring this forum, login to SourceForge.net and visit: https://sourceforge.net/forum/unmonitor.php?forum_id=114574 |
From: Spencer R. <oob...@ya...> - 2004-09-11 02:53:37
|
Hi everyone. First I'd like to say that PHP.XPath has made my life a hell of a lot easier. Thanks! Second, I'd like to mention what I think is a bug. I'm using v3.5 and it chokes on ©, >, and < (maybe more, but those are what I've used). I've traced through the _translateAmpersand() function in the .class file, and I don't see why it doesn't work. When I use any of those entities normally, Firefox tells me it's an empty document and won't load. When I manually make the corrections (ie. "&copy;") in my sources, the output source from PHP.XPath generates "&©", and it displays the desired character preceded by an & in the browser view. Am I using it wrong? is this a bug? Here's my config (Apache/2.0.50 (Win32) PHP/5.0.0) Thanks, oobleck P.S. Ok, I see it now. I'm using PHP5, but it seems not to work at all in PHP5. How can I circumvent this problem? Any ideas? _______________________________ Do you Yahoo!? Shop for Back-to-School deals on Yahoo! Shopping. http://shopping.yahoo.com/backtoschool |
From: Marcus F. <ai...@un...> - 2004-08-28 15:21:42
|
**FOUND the problem...** on line 1232 appears: if ($absoluteXpath == '/') $absoluteXpath = ''; it SHOULD read if ($absoluteXPath == '/') $absoluteXPath = ''; with Path capitalized... ------------------------------------------ Hey guys Any idea why this fails? include( "cgi-bin/EbayConnection.php" ); $foo = new EbayConnection( true ); include( "cgi-bin/XMLFunctions.php" ); require_once( "cgi-bin/XPath.class.php" ); if( $cmd == "search" ){ $xml = $foo->search( $criteria ); $xpe = new XPath(); $xpe->setVerbose( 5 ); if( $xpe->importFromString( $xml ) ){ echo "ok"; }else{ echo "no"; } if( $xpe->exportAsXml( "/" ) ){ echo "ok again"; }else{ echo "moo"; echo $xpe->getLastError(); } } the line: $xpe->exportAsXml( "/" ) ONLY works when I put nothing in that field. -- Uni Studios ai...@un... |
From: Marcus F. <ai...@un...> - 2004-08-28 02:50:19
|
Hey guys Any idea why this fails? include( "cgi-bin/EbayConnection.php" ); $foo = new EbayConnection( true ); include( "cgi-bin/XMLFunctions.php" ); require_once( "cgi-bin/XPath.class.php" ); if( $cmd == "search" ){ $xml = $foo->search( $criteria ); $xpe = new XPath(); $xpe->setVerbose( 5 ); if( $xpe->importFromString( $xml ) ){ echo "ok"; }else{ echo "no"; } if( $xpe->exportAsXml( "/" ) ){ echo "ok again"; }else{ echo "moo"; echo $xpe->getLastError(); } } the line: $xpe->exportAsXml( "/" ) ONLY works when I put nothing in that field. -- Uni Studios ai...@un... |