Re: loadXML() and namespace

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Michael A. Peters wrote:
It seems that if I use loadXML($string) and the $string has a namespace defined in it, domdocument is nuking the namespace and changing the nodenames from whatever to defaultwhatever.

Example -

<math xmlns="http://www.w3.org/1998/Math/MathML";>
  <mrow>
*snip*
  </mrow>
</math>

would get changed to

<defaultmath>
  <defaultmrow>
*snip*
  </defaultmrow>
</defaultmath>

which of course breaks the page.

It seems to be related to the "xml" island concept of (x)html 5 where for compatibility with IE and MathType etc. an xmlns is declared as an attribute but a prefix isn't declared (IE no m:math).

To solve it, on the buffered string that gets imported I run:

function nsIsland($string) {
   $search[]  = "/<math\s([^xmlns]*)xmlns=[^\s>]*/";
   $replace[] = "<math $1";
   return preg_replace($search,$replace,$string);
   }

(I assume I may have to add a search/replace for svg) - then after import I look for math nodes and add the xmlns attribute back to them, and it seems to work.

A bit hackish, I'm guessing a future version of DOMDocument may take the html5 "xml island" into consideration, but this works now.

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux