通过 PHP 和 SimpleXML 问题显示数据
Displaying data via PHP and SimpleXML problem
我已经解决了这个网站上的很多 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 元素中获取数据。如果有人能指出我正确的方向,我将不胜感激。我尝试了很多很多选择。谢谢-
这是一个非常常见的错误,但如果您不知道自己在寻找什么,则很难发现:使用 XML 解析时返回的第一个对象是 根元素,不是代表文档的东西。
所以在你的例子中,$testArray
是元素 <results preview = '0'>
,你想要 $testArray->result
而不是 $testArray->results->result
。
顺便说一下,"testArray" 这个变量的名字不好 - 它不是数组,它是一个对象。
我在文件
中使用了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"(或根)元素。
您需要从根元素到子元素。 $xml->result
将在结果集中给出结果对象,您需要将其作为对象数组进行循环。
我已经解决了这个网站上的很多 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 元素中获取数据。如果有人能指出我正确的方向,我将不胜感激。我尝试了很多很多选择。谢谢-
这是一个非常常见的错误,但如果您不知道自己在寻找什么,则很难发现:使用 XML 解析时返回的第一个对象是 根元素,不是代表文档的东西。
所以在你的例子中,$testArray
是元素 <results preview = '0'>
,你想要 $testArray->result
而不是 $testArray->results->result
。
顺便说一下,"testArray" 这个变量的名字不好 - 它不是数组,它是一个对象。
我在文件
中使用了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"(或根)元素。
您需要从根元素到子元素。 $xml->result
将在结果集中给出结果对象,您需要将其作为对象数组进行循环。