PHP XML Reader - поместите значения в массив - PullRequest
1 голос
/ 06 мая 2011

В предыдущем вопросе я спросил, как извлечь значения из файла XML и поместить их в массив.

PHP xmlreader - значения для вопроса о массиве

При использовании simpleXML мне не удалось прочитать файл XML без ошибок. Я могу только предположить, что XML-файл содержит некоторые плохие символы, потому что файл был успешно прочитан с помощью PHP XMLreader с кодировкой ISO-8859-1.

В идеале я хотел бы использовать simpleXML, потому что циклы кажутся более простыми, но XMLreader, кажется, работает.

  1. Есть ли способ установить кодировку XML-файла для simpleXML?

2. Если вы используете XMLreader, как вы можете изменить код из моего предыдущего вопроса, добавлять значения в массив только тогда, когда определенное значение в элементе найдено?

Пример: текущий код из предыдущего вопроса захватывает все id и username.
Как вы получаете идентификатор и имя пользователя only when [ title ] = value

<!-- XML File -->
<?xml version="1.0" encoding="UTF-8"?>
<working version="2.0">
<group name="test">
    <userdata>
        <title>data</title>
        <id>data</id>
        <username>data</username>
            </userdata>
     </group>
</working>

1 Ответ

3 голосов
/ 06 мая 2011

Нет способа использовать что-либо кроме UTF-8 с SimpleXML .Однако, поскольку SimpleXML - это просто более простой способ использования DOM , вы можете переключиться на использование DOM .На самом деле, то, что вы хотите, было бы довольно просто в DOM .Измените '%%something%%' на то, что вы хотите сопоставить (например, 'administrator').

<?php
    $xml = new DOMDocument( "1.0", "ISO-8859-1" );
    $xml->load("path/to/file.xml");

    $xpath = new DOMXPath( $xml );
    $nodes = $xpath->query( "/working/group/userdata[ title = '%%something%%' ]" );

    $array = array();
    foreach( $nodes as $k => $node )
    {
        foreach( $node->childNodes as $cnode )
        {
            $array[ $k ][ $cnode->nodeName ] = $cnode->textContent;
        }
    }
?>

Обратите внимание: Оба DOM и SimpleXML загрузить весь документ в память, прежде чем они смогут обработать его.Из-за этого, если ваш документ больше, чем доступная память для PHP (см. Настройку ini memory_limit), вам потребуется использовать XMLReader или XMLWriter в этих крайних случаях.

Также обратите внимание, я не сделал 'Не проверяйте это, но это должно быть чертовски близко к тому, что вам нужно.И если вам нужен пример XMLReader, дайте мне знать.Мне было проще использовать DOM для меня: P

...