Подтвердить что ты не робот

Библиотека PHP для синтаксического анализа XML с двоеточиями в именах тегов?

Я пытался использовать SimpleXML, но похоже, что XML не выглядит так:

<xhtml:div>sample <xhtml:em>italic</xhtml:em> text</xhtml:div>

Итак, какая библиотека будет обрабатывать теги, которые выглядят так (в них есть двоеточие)?

4b9b3361

Ответ 1

Скажем, у вас есть такой 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;

Ответ 2

Если вы хотите быстро исправить это (я делаю, когда чувствую себя ленивым):

// 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: в </xhtml_. Вид взломанный и может выйти из строя, если задействованы блоки контейнеров CDATA NameSpaced или имена тегов UNICODE, но я бы сказал, что вы, как правило, безопасны в использовании (пока еще не удалось).

Ответ 3

Colon обозначает пространство имен XML. DOM имеет хорошую поддержку пространств имен.

Ответ 4

Я не думаю, что это хорошая идея, чтобы избавиться от толстой кишки или заменить ее чем-то другим, как это предлагали некоторые люди. Вы можете легко получить доступ к элементам, которые имеют префикс пространства имен. Вы можете либо передать URL-адрес, который идентифицирует пространство имен, как аргумент метода children(), либо передать префикс пространства имен и "true" методу children(). Второй подход требует PHP 5.2 и выше.

SimpleXMLElement:: children