通过PHP和SimpleXML显示数据问题

时间:2019-03-07 20:34:53

标签: php xml simplexml

我在此站点上回答了很多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元素获取数据。如果有人能指出正确的方向,我将不胜感激。我尝试了很多选择。谢谢-

2 个答案:

答案 0 :(得分:0)

这是一个非常常见的错误,但是如果您不知道要查找的内容,这将是一个很难发现的错误:使用XML解析时返回的第一个对象是根元素,而不是代表文档的东西。 因此,在您的情况下,$ testArray是元素,并且您希望$ testArray-> result而不是$ testArray-> results-> result。 顺便说一句,“ testArray”是该变量的坏名字-它不是数组,而是对象。

答案 1 :(得分:0)

我使用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它自己引用“结果”(或根)元素。 您需要从根到子元素。 $xml->result会将结果对象放入结果集中,您需要将其作为对象数组进行循环。