On Mon, Mar 9, 2009 at 8:24 PM, Nathan Rixham <nrix...@gmail.com> 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

Reply via email to