On Mon, Mar 9, 2009 at 8:24 PM, Nathan Rixham <nrixham@xxxxxxxxx> wrote: > Michael A. Peters wrote: >> >> Nathan Rixham wrote: >>> >>> Michael A. Peters wrote: >>>> >>>> Seems like such a function does not exist in php. >>>> I can write my own function that does it using >>>> DOMElement->hasAttribute() - but I'm not sure how to get an array of every >>>> element in the DOM to test them for the attribute. >>>> >>>> Any hints? >>>> >>>> I'm sure it's simple, I'm just not seeing the function that does it. >>> >>> DOMXPath :) >>> >> >> I figured it out - >> >> $document->getElementsByTagName("*"); >> >> seems to work just fine. >> >> I do need to find out more about XPath - unfortunately reading the >> examples that are out in the wild is troublesome because it seems 95% of >> them involve the deprecated dom model from pre php 5, so to make sense of >> them I would have to port the examples to php5 DOMDocument first. >> > > Xpath is easier than most think.. for example > > //p[@class='red'] > > that's all p tags with a class of "red" > > infact.. http://www.w3schools.com/XPath/xpath_syntax.asp covers about > everything you'll need for normal stuff :) > Well, I thought so too. That was until I had to use xpath on a few documents that used namespaces. Try this with a strict xhtml document and all of a sudden your simple xpath query becomes something like this: //*[namespace-uri()='http://www.w3.org/1999/xhtml' and local-name() = 'p' and @class='red'] Although, for the original question, I believe something like this would still work (unless the attributes themselves are namespaced): //*[@someattribute!=''] Andrew -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php