Re: DOM API Namespaces - help?
| From: | Nathan Rixham | Date: | Thu, 24 Jan 2008 15:43:03 +0000 |
| Subject: | Re: DOM API Namespaces - help? | ||
| References: | 1 2 3 4 5 6 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-267997@lists.php.net to get a copy of this message | ||
Cheers indeed Rob!
That DOMXPath solution is exactly what I was looking for; Many, Many Thanks,
Nathan
Rob wrote:
Hi Nathan, Nathan Rixham wrote:Cheers Rob, But this is the problem, I don't know what the namespace/prefix is! ie "xi" and the following doesn't work: $root->getAttributeNS('http://www.w3.org/2000/xmlns/', '*'); further xmlns is ?not? a prefix so this won't work either.. $root->lookupPrefix('http://www.w3.org/2000/xmlns/'); we need to assume that we don't know the document we're working on, thus we don't know: a] if it has any namespaces defined b] if any, what the namespaces are c] if any, what the prefixes are. And I still can't find any way of finding this out, it should be simple enough surely? still help!?There are a couple of ways to do this. Using only DOM, you can grab the namespaces via XPath: $root = $dom->documentElement; $xpath = new DOMXPath($dom); $nodes = $xpath->query('namespace::*'); foreach ($nodes AS $node) {print "x: ".$node->localName."\n";} A simpler solution is to use simplexml: $sxe = simplexml_import_dom($root); var_dump($sxe->getDocNamespaces(true)); RobNathan Rob wrote:Hi Nathan, You need to retrieve the attribute based on the xmlns namespace. Nathan Rixham wrote:Thanks Jessen, I'm using the DOM API (domdocument) in PHP 5 - and yes pull xmlns:xi="http://www.w3.org/2001/XInclude" from the chapter or indeed any namespaces defined in the root node and store them in a variable. If anybody could shed any light it'd be greatly appreciated.$xml = '<?xml version="1.0" ?> <chapter xmlns:xi="http://www.w3.org/2001/XInclude"> <a /> </chapter>'; $dom = new DOMDocument(); $dom->loadXML($xml); $root = $dom->documentElement; $attr = $root->getAttributeNS('http://www.w3.org/2000/xmlns/', 'xi'); var_dump($attr); RobNathan Per Jessen wrote:Nathan Rixham wrote:but assuming the above file is: <?xml version="1.0" ?> <chapter xmlns:xi="http://www.w3.org/2001/XInclude"> <a /> </chapter> how would one retrieve xmlns:xi="http://www.w3.org/2001/XInclude"When you say 'retrieve', what do you really mean? You need to get the namespace value into a PHP variable? I would probably look at the namespace-uri() function in XSLT, but I don't know if you're using XSLT? /Per Jessen, Zürich