Разобрать XML-файл по определенному тегу, чтобы получить содержимое одноуровневого тега.

У меня есть этот файл XML:

   <page>
<title>test</title>
<text>bla bla</text>
</page>
<page>
<title>another test</title>
<text>bla bla</text>
</page>
<page>
<title>hello</title>
<text>hello world</text>
</page>

Я хочу проанализировать файл (синтаксический анализатор PHP SAX), чтобы найти страницы с заголовком «привет», а затем сохранить соответствующий текстовый тег. Что я сделал до сих пор, так это:

   $pages = array();
$elements  = null;

function startElements($parser, $name, $attrs) {
global $wiki, $elements;

if(!empty($name)) {
$elements = $name;
}
}

function endElements($parser, $name) {
global $elements;

if(!empty($name)) {
$elements = null;
}
}

function characterData($parser, $data) {
global $pages, $elements;

if(!empty($data)) {
if ($elements == 'TITLE' ) {
if((preg_match('/Hello/', $data)==1))
{

// ... I found the page with the good title, but how to get the following text tag content!!

}
}
}
}

$parser = xml_parser_create();

xml_set_element_handler($parser, "startElements", "endElements");
xml_set_character_data_handler($parser, "characterData");

if (!($handle = fopen('tmp.xml', "r"))) {
die("could not open XML input");
}

while($data = fread($handle, 4096)) {
xml_parse($parser, $data);
}

Любые идеи о том, как получить содержимое тега Text с определенным тегом Titles? Я мог бы получить нужный мне результат, сохранив все данные в массиве … и затем в поиск! но я бы хотел лучшего решения.

благодарю вас.

0

Решение

Хорошо, я нашел решение, не основанное на парсере SAX, как я хотел, но все же адаптированное к большим файлам. Это путем объединения SimpleXML (анализатор DOM) и XMLReader (анализатор на основе потоков). SimpleXML обеспечивает легкий доступ к дочерним узлам.

С XMLReader данные передаются по одному элементу за раз, используя
развернуть (). С помощью этого метода вы можете преобразовать узел, переданный XMLReader
в DOMElement, а затем в SimpleXML.

Детали для объединения обоих можно найти здесь: http://www.ibm.com/developerworks/library/x-xmlphp2/

Я надеюсь, что это помогает кому-то еще.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]