On Fri, May 25, 2012 at 3:57 AM, Gary listgj-phpgene...@yahoo.co.uk wrote:
If I use simplexml_load_string to create an XML object with the
following XHTML
,
| ?xml version=1.0?
| !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN
| http://www.w3.org/TR/
| xhtml1/DTD/xhtml1-strict.dtd
| html xmlns=http://www.w3.org/1999/xhtml;
| headmeta http-equiv=Content-Type content=text/html; charset=UTF-8
| /
| titletest title/title
| /head
| body
| !-- comment --
| /body
| /html
`
I get this SimpleXMLElement back
,
| object(SimpleXMLElement)#1 (2) {
| [head]=
| object(SimpleXMLElement)#2 (1) {
| [title]=
| string(10) test title
| }
| [body]=
| object(SimpleXMLElement)#3 (1) {
| [comment]=
| object(SimpleXMLElement)#4 (0) {
| }
| }
| }
`
but I cannot seem to get anything out of an xpath expression, no matter
what I try.
If, however, I remove the 'xmlns=http://www.w3.org/1999/xhtml;' in the
html element, it works fine. So yeah, I can just remove that text,
but... is there something wrong here, in my expectation or in the xpath
function?
TIA.
--
Gary Please do NOT send me 'courtesy' replies off-list.
Gary,
I am not sure what you have tried, but namespaces change everything in
XPath compared to documents without them. This isn't exact, but XPath
without namespaces is often simple such as:
/html/head/title
Once you add a namespace, though, the XPath becomes something like
/*[namespace-uri()='http://www.w3.org/1999/xhtml' and
local-name()='html']/*[namespace-uri()='http://www.w3.org/1999/xhtml'
and local-name()='head']/*[namespace-uri()='http://www.w3.org/1999/xhtml'
and local-name()='title']
(I'm not sure of the exact syntax since I don't have something open
right now that I can test it in.
However, I think SimpleXML has some features that make this easier.
Take a look at this:
http://www.php.net/manual/en/simplexmlelement.registerxpathnamespace.php
Andrew
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php