Re: Re: DOMDocument getElementsByAttribute ??
| From: | Andrew Ballard | Date: | Tue, 10 Mar 2009 14:33:08 +0000 |
| Subject: | Re: Re: DOMDocument getElementsByAttribute ?? | ||
| References: | 1 2 3 4 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-289771@lists.php.net to get a copy of this message | ||
On Mon, Mar 9, 2009 at 8:24 PM, Nathan Rixham <nrixham@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