PHP XML Parser - игнорирование вложенных / дочерних тегов - PullRequest
0 голосов
/ 08 мая 2009

У меня есть ситуация, когда я использую синтаксический анализатор XML для извлечения данных из php: //input.

Отправляемые данные выглядят следующим образом:

<this>foo</this>
<that>bar></that>
<data><dong>zebras</dong><fong>monkeys</fong></data>

Теперь проблема в том, что обработчик:

$xml_parser = xml_parser_create();

xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false);
xml_set_element_handler($xml_parser, "startTag", "endTag");
xml_set_character_data_handler($xml_parser, "contents");

$document = file_get_contents("php://input");                  

xml_parse($xml_parser, $document);

xml_parser_free($xml_parser);

... интерпретирует теги для меня, чтобы расшифровать содержимое, чтобы сделать его полезным ... Кажется, что ничего не хватает в <data> т.е. мне нужно выяснить, как я могу заставить его игнорировать дочерние / вложенные элементы / теги и просто вычеркнуть все данные.

Ответы [ 4 ]

1 голос
/ 08 мая 2009

WideDonkey, вы рассматривали возможность использования DOM вместо этого? Вы можете легко сделать:

$dom = new DOMDocument();
$dom->loadXML(file_get_contents('php://input'));

$data = $dom->getElementsByTagName('data');
$data = $data[0]->asXML();
0 голосов
/ 30 июня 2009

phpQuery предоставляет вам всю мощь селекторов jQuery, заключенных в оболочку PHP.

phpQuery::newDocumentFileXHTML('my-xhtml.html')->find('p');
0 голосов
/ 30 июня 2009

В итоге я использовал SimpleXML для: -

$xml = new SimpleXMLElement($input);

$whatIwant = $xml->bar->monkeys

Вы можете пройти столько уровней, сколько захотите, например, тест

$ xml - самый дальний тег-обертка.

0 голосов
/ 08 мая 2009

Я не уверен, правильно ли я понял вопрос, но

<?php
function contents($parser, $data) {
  echo $data;
}

$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false);
// xml_set_element_handler($xml_parser, "startTag", "endTag");
xml_set_character_data_handler($xml_parser, "contents");
// $document = file_get_contents("php://input");
$document = '<x><this>foo</this><that>bar</that><data><dong>zebras</dong><fong>monkeys</fong></data></x>';
xml_parse($xml_parser, $document);
xml_parser_free($xml_parser);

печать

foobarzebrasmonkeys
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...