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

Reply via email to