строка перед первым узлом в документе XML

0

У меня странная проблема с разбором XML.
PHP:

/**
 * Klasa zamiany pliku XML na tablice w PHP
 * Dodałem metode statyczną utf8_for_xml która usuwa krzaki bezpośrednio przy pobieraniu XML'a
 * 
 * XML2Array: A class to convert XML to array in PHP
 *
 * Author : Abdelwahd Hannabou
 *
 * Usage:
 *       $Array = XML2Array::CreateArray('FILE_PATH');
 */

class XML2Array
{
    public static function utf8_for_xml($string)
    {
        return preg_replace ('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u', '', $string);
    }

    public static function ampersandClean($string)
    {
       return preg_replace('/&/', '&', $string);
    }

    public static function CreateArray($XmlFilePath)
    {
        if (!file_exists($XmlFilePath)) {
            echo "Wrong path";
            return FALSE;
        }
        $Class = array();
        $Class['UsersFileXml'] = self::ampersandClean(self::utf8_for_xml(file_get_contents($XmlFilePath)));
/*      echo "<pre>";
        print_r($Class['UsersFileXml']);
        echo "</pre>"; */

        $Class['FileXml'] = simplexml_load_string($Class['UsersFileXml']);
        echo "<pre>";
        print_r($Class['FileXml']);
        echo "</pre>";
        $Class['FileJson'] = json_encode($Class['FileXml']);
        $Array = json_decode($Class['FileJson'],TRUE);
        unset($Class);

        return $Array;
    }
}

$xml = XML2Array::CreateArray('p.xml');
/* echo '<pre>';
print_r($xml);
echo '</pre>';
 */

XML p.xml:

<?xml version="1.0" encoding="UTF-8"?>
<main>
<wezel1>test</wezel1>
<wezel2>test2</wezel2>
<something>string so array did not show this what is in "somethingelse"<somethingelse>test3</somethingelse></something>
</main>

Проблема в том, что в массиве не отображается узел <somethingelse>test3</somethingelse>. Как пропустить эту строку и проанализировать следующий узел? Когда строка не находится в первой позиции, это нормально:

itwork.xml

<?xml version="1.0" encoding="UTF-8"?>
<main>
<wezel1>test</wezel1>
<wezel2>test2</wezel2>
<something><somethingelse>test3</somethingelse>String but here string is not problem, PHP parse next node<itisok>This is in array</itisok></something>
</main>
  • 0
    Вы не должны искать массив в первую очередь, а просто анализировать XML. PHP поставляется с тремя библиотеками разбора XML, которые включены по умолчанию. В противном случае вам нужно устранить неполадки в вашем коде и выяснить, почему именно он не работает первым: какая строка в вашем коде, где вы впервые получаете неожиданное значение, в то время как строка до этого все еще была в порядке. Ты трижды проверил это? Где твои тесты?
  • 0
    Я не нашел ответа на свой вопрос. Я разбираю приведенный выше XML-код, используя simplexml_load_string, а в приведенном выше коде с именем p.xml я никак не получаю <somethingelse> test3 </thingelse>. Как это получить, если перед этим узлом находится строка? Просто создайте эти файлы, и вы увидите. Я описал это, как я могу.
Показать ещё 1 комментарий
Теги:
string
document
parsing

1 ответ

-1

Возможно, это не тот ответ, который вы ищете, но он правильный. Не изобретайте колесо PHP, уже обработав это. Проверьте первый комментарий. Я избавлю вас от проблемы: Три строки xml2array:

$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
  • 0
    Вы правы, но я сделал это выше, моя проблема в том, что simplexml_load_string не может пропустить строку перед <node> test </ node>, или я использую ее неправильно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню