PHP - получить XML-файлы из папки, циклически проходить и получать контент - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь получить все xml-файлы из папки, которая отлично работает с этим кодом, который я нашел на ТАК :

$files = glob("folder/*xml");    
if (is_array($files)) {   
    foreach($files as $filename) {
        $xml_file = file_get_contents($filename, FILE_TEXT);
        // and proceed with your code
    }
}

Теперь я пытаюсьполучить несколько контентов из каждого xml-файла.

Используя это после части "// и продолжить с вашим кодом"

echo $xml_file.'<br /><br />';

Iполучить полное содержимое каждого файла.

Но я хочу получить только несколько элементов и атрибутов.

Используемые мной xml-файлы являются openimmoна основе. Структура этих xml-файлов выглядит следующим образом (отрывок):

<openimmo>
    <anbieter>
        <anbieternr>12345</anbieternr>
        <firma>company name</firma>
        <immobilie>
            <objektkategorie>
                <objektart>
                    <haus haustyp="DOPPELHAUSHAELFTE"/>
                </objektart>
            </objektkategorie>
            <geo>
                <plz>12345</plz>
            </geo>
        </immobilie>
    </anbieter>
</openimmo>

Я использую другой скрипт, где анализируется отдельный xml-файл, и я могу получить его содержимое следующим образом:

echo 'Zip-Code: '.$user->immobilie->geo->plz.'<br />';

Но как я могу получить различное содержимое элементов, таких как geo->plz", или атрибутов, таких как <haus haustyp="DOPPELHAUSHAELFTE"/>, просматривая каждый файл в данной папке?

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Вы можете использовать DOMDocument класс для анализа XML в DOM.Также используйте getElementsByTagName() для выбора элемента на основе его имени и используйте nodeValue для получения текста элемента и используйте getAttribute() для получения значения атрибута.

$doc = new DOMDocument();
$doc->loadXML($xml_file);
$nodeVal = $doc->getElementsByTagName("geo")->item(0)->nodeValue;
// return 12345
$nodeAttr = $doc->getElementsByTagName("haus")->item(0)->getAttribute("haustyp");
// return DOPPELHAUSHAELFTE

Таким образом, ваш код должен быть изменен на

$doc = new DOMDocument();
foreach($files as $filename) {
    $xml_file = file_get_contents($filename, FILE_TEXT);
    $doc->loadXML($xml_file);
    $nodeVal = $doc->getElementsByTagName("geo")->item(0)->nodeValue;
    $nodeAttr = $doc->getElementsByTagName("haus")->item(0)->getAttribute("haustyp");
}
0 голосов
/ 30 сентября 2018

Что вы можете сделать, это преобразовать весь XML-файл в массив.Таким образом, вы можете иметь многомерный массив со всеми значениями, а затем пролистать их и получить то, что нужно:

foreach($files as $filename) {
        $xml_file = file_get_contents($filename, FILE_TEXT);      
        $xml = simplexml_load_string($xml_file, "SimpleXMLElement", LIBXML_NOCDATA);
        $json = json_encode($xml);
        $arr = json_decode($json,TRUE);
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...