2015-12-02 1 views
2

У меня проблема с запросом, который я использую с DOMDocument. Я буду использовать тег «bbcode like» в строке и найти атрибут data_id.DOMDocument: как разобрать тег bbcode как тег?

Я использую THP код ниже, но я всегда получаю эти предупреждения: Внимания: DOMXPath :: запрос(): Invalid выражения

"как BB-кода" код я хочу использовать для:

[sondage data_id=1] 

PHP КОД

$doc = new DOMDocument(); 
$doc->loadHTML($row->text); 
$selector = new DOMXPath($doc); 

$result = $selector->query('//[sondage'); 

foreach($result as $node) { 
    echo $node->getAttribute('data_id'); 
} 

Спасибо ваше для вашей помощи

+0

Его недействительный HTML, поэтому нет ничего, чтобы разобрать. – Youri

+0

Извините, DOMDocument принимает только XML-теги. –

+0

@ У вас есть еще одно решение? получить все теги bbcode и получить атрибут data_id? – Raphael

ответ

0

Как уже отмечали другие люди, bbcode не является значением XML-разметки, поэтому его не анализируют.

Предполагая, что все ваши квадратные скобки часть BBCode (Большое предположение, предоставляется), вы могли бы «заменить» их угловые скобки, чтобы сделать их похожими тег:

$text = str_replace(array("[","]"),array("<",">"),$row->text; 
//$text now contains 'XML-ised' content 

Однако, если у вас есть любые квадратные скобки, которые не BBCode, вполне вероятно, что он сломается ...

в качестве альтернативы, вы можете использовать регулярные выражения, чтобы получить все элементы BBCode, а затем разобрать их еще оттуда:

$text = $row->text; 
preg_match_all('#\[[a-z]+.*?\](.*?)\[/[a-z]+\]#is',$text,$matches); 
//$matches will contain all your BBCode, which you can then parse further as required.