Я пытаюсь использовать SimpleXML , но похоже, что XML выглядит не так:
<xhtml:div>sample <xhtml:em>italic</xhtml:em> text</xhtml:div>
Итак, какая библиотека будет обрабатывать теги, которые выглядят так (в них есть двоеточие)?
Скажем, у вас есть такой xml.
<xhtml:div> <xhtml:em>italic</xhtml:em> <date>2010-02-01 06:00</date> </xhtml:div>
Вы можете получить доступ к ним следующим образом: $xml->children('xhtml', true)->div->em;
однако , если вы хотите поле даты, это: $xml->children('xhtml', true)->div->date;
не работает , потому что вы застряли в пространстве имен xhtml.
вы должны снова выполнить «дети», чтобы вернуться к пространству имен по умолчанию:
$xml->children('xhtml', true)->div->children()->date;
Если вы хотите исправить это быстро, сделайте это (я делаю, когда чувствую себя ленивым) :
// Will replace : in tags and attributes names with _ allowing easy access $xml = preg_replace('~(</?|\s)([a-z0-9_]+):~is', '$1$2_', $xml);
Это преобразует <xhtml:
в <xhtml_
и </xhtml:
to </xhtml_
. Вид взломанный и может выйти из строя, если задействованы блоки контейнеров CDATA NameSpaced или имена тегов UNICODE, но я бы сказал, что вы, как правило, безопасны в использовании (еще не подвели меня) .
Colon обозначает пространство имен XML. DOM имеет хорошую поддержку пространств имен.
Я не думаю, что это хорошая идея, чтобы избавиться от толстой кишки или заменить ее чем-то другим, как это предлагали некоторые люди. Вы можете легко получить доступ к элементам, которые имеют префикс пространства имен. Вы можете либо передать URL-адрес, который идентифицирует пространство имен, как аргумент метода children (), либо передать префикс пространства имен и «true» методу children (). Второй подход требует PHP 5.2 и выше.
SimpleXmlElement :: дети