Re: [PHP] Re: DOMDocument getElementsByAttribute ??
On Mon, Mar 9, 2009 at 8:41 PM, Michael A. Peters mpet...@mac.com wrote: Nathan Rixham 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 :) What I'm doing is writing a filter that removes forbidden attributes - such as the event attributes (onload, onmouseover, etc.) - the value of the attribute of the attribute I could care less about. There's probably an xpath way to get all the elements and then check them for a specified attribute, but using the wildcard with the getElementsByTagName also works. If your source is well-formed enough to use the DOM library, then you could probably write an XSLT template that would give you exactly what you want. You still need to understand xpath syntax, but I found a post here that talks about what you are doing: http://www.biglist.com/lists/xsl-list/archives/200404/msg00668.html Andrew -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] Re: DOMDocument getElementsByAttribute ??
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
[PHP] Re: DOMDocument getElementsByAttribute ??
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 :) -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP] Re: DOMDocument getElementsByAttribute ??
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. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP] Re: DOMDocument getElementsByAttribute ??
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 :) -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP] Re: DOMDocument getElementsByAttribute ??
Nathan Rixham 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 :) What I'm doing is writing a filter that removes forbidden attributes - such as the event attributes (onload, onmouseover, etc.) - the value of the attribute of the attribute I could care less about. There's probably an xpath way to get all the elements and then check them for a specified attribute, but using the wildcard with the getElementsByTagName also works. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php