Отображение данных с помощью PHP и проблема SimpleXML - PullRequest
0 голосов
/ 07 марта 2019

Я прошел через множество вопросов SimpleXML на этом сайте. Мои данные немного странные, и я не могу это изменить. Я пытаюсь получить такие данные, как «Building1» и «Hostname1» из моих данных, чтобы я мог взять эти данные и посмотреть другие данные, а затем отобразить их.

Вот пример моих данных:

    <?xml version='1.0' encoding='UTF-8'?>
<results preview = '0'>
    <result offset='0'>
        <field k='hostname'>
          <value h='1'><text>Hostname 1</text></value>
        </field>
        <field k='os'>
          <value><text>Windows 7</text></value>
        </field>        
        <field k='location'>
          <value h='1'><text>Building 1</text></value>
        <field>
    </result>
   <result offset='1'>
        <field k='hostname'>
          <value h='1'><text>Hostname 2</text></value>
        </field>
        <field k='os'>
          <value><text>Windows 10</text></value>
        </field>        
        <field k='location'>
          <value h='1'><text>Building 2</text></value>
        </field>
     </result>
........

А вот как я пытаюсь на это посмотреть:

$xml = simplexml_load_file(data.xml);
print_r($xml);    
$testArray = new SimpleXMLElement($xml);
$records = $testArray->results->result;
print_r($records);

По какой-то причине я просто не могу понять, как получить данные из элементов xml. Если кто-нибудь может указать мне правильное направление, я был бы признателен. Я перепробовал много, много вариантов. * 1009 Благодарения и *

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Я использовал xml в качестве строки в файле

<?php
$sXmlString = <<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<results preview = "0">
    <result offset="0">
        <field k="hostname">
          <value h="1"><text>Hostname 1</text></value>
        </field>
        <field k="os">
          <value><text>Windows 7</text></value>
        </field>        
        <field k="location">
          <value h="1"><text>Building 1</text></value>
        </field>
    </result>
    <result offset="1">
        <field k="hostname">
          <value h="1"><text>Hostname 2</text></value>
        </field>
        <field k="os">
          <value><text>Windows 10</text></value>
        </field>        
        <field k="location">
          <value h="1"><text>Building 2</text></value>
        </field>
    </result>
</results>
EOF;

echo '<pre>';
$xml = simplexml_load_string($sXmlString);
print_r($xml);
echo '<hr/>';
echo count($xml->result);
echo '<hr/>';
foreach($xml->result as $report)
{
    var_dump($report);
    echo '<hr/>';
}

В коде вы можете увидеть $ xml, который сам ссылается на элемент «results» (или root).Вам нужно путешествовать от корня до дочерних элементов.$xml->result выдаст объект результата в наборе результатов, и вам нужно перейти к циклу, как к массиву объектов.

0 голосов
/ 08 марта 2019

Это действительно распространенная ошибка, но ее очень трудно обнаружить, если вы не знаете, что ищете: первый объект, который вы получаете при синтаксическом анализе XML - это корневой элемент , а не что-то, представляющее документ.

Итак, в вашем случае $testArray - это элемент <results preview = '0'>, и вы хотите, чтобы $testArray->result не $testArray->results->result.

Кстати, "testArray "- это недопустимое имя для этой переменной - это не массив, это объект.

...