Я обрабатываю XML-совместимый вход XHTML, используя XPATH в PHP, как это:
$xml=new DOMDocument();
$xml->loadXML(utf8_encode($temp));
[...]
$temp=utf8_decode($xml->saveXML());
Возникает проблема, заключающаяся в том, что узлы, которые не могут быть закрыты непосредственно в соответствии с спецификациями HTML5, например
<textarea id="something"></textarea>
или div для использования JS
<div id="someDiv" class="whaever"></div>
вернется как
<textarea id="something" />
и
<div id="someDiv" class="whaever" />
В настоящее время я обращаюсь к этому, используя str_replace
, но тот, что мне нужно, чтобы соответствовать отдельным случаям. Как я могу это решить?
В то же время XPATH настаивает на выпуске
xmlns:default="http://www.w3.org/1999/xhtml
а на отдельных только что созданных узлах он добавляет такие вещи, как <default:p>
. Как остановить это, не прибегая к глупому поиску и заменить его следующим образом:
$temp=str_replace(' xmlns:default="http://www.w3.org/1999/xhtml" '," ",$temp);
$temp=str_replace(' xmlns:default="http://www.w3.org/1999/xhtml"'," ",$temp);
$temp=str_replace('<default:',"<",$temp);
$temp=str_replace('</default:',"</",$temp);
?
EDIT: У меня действительно возникают проблемы с глупым поиском и заменой, и я не намерен атаковать выходной XHTML с помощью RegExp. Рассмотрим этот пример:
<div id="videoPlayer0" class="videoPlayerPlacement" data-xml="video/cp_IV_a_1.xml"/>
Очевидно, что самозакрывающиеся divs являются незаконными (по крайней мере, в одном контексте, когда я не могу выводить в качестве mime application/xhtml + xml, но я вынужден использовать mime text/html), и во всех остальных случаях они не проверяются.