以下是我正在使用的XML - 还有更多项目 - 这是第一组。如何将这些元素放入数组中?我一直在尝试PHP的SimpleXML等,但我不能这样做。
<response xmlns:lf="http://api.lemonfree.com/ns/1.0">
<lf:request_type>listing</lf:request_type>
<lf:response_code>0</lf:response_code>
<lf:result type="listing" count="10">
<lf:item id="56832429">
<lf:attr name="title">Used 2005 Ford Mustang V6 Deluxe</lf:attr>
<lf:attr name="year">2005</lf:attr>
<lf:attr name="make">FORD</lf:attr>
<lf:attr name="model">MUSTANG</lf:attr>
<lf:attr name="vin">1ZVFT80N555169501</lf:attr>
<lf:attr name="price">12987</lf:attr>
<lf:attr name="mileage">42242</lf:attr>
<lf:attr name="auction">no</lf:attr>
<lf:attr name="city">Grand Rapids</lf:attr>
<lf:attr name="state">Michigan</lf:attr>
<lf:attr name="image">http://www.lemonfree.com/images/stock_images/thumbnails/2005_38_557_80.jpg</lf:attr>
<lf:attr name="link">http://www.lemonfree.com/56832429.html</lf:attr>
</lf:item>
<!-- more items -->
</lf:result>
</response>
谢谢你们
编辑:我希望第一项数据易于访问变量,我一直在努力让SimpleXML工作,因为我是PHP的新手,所以我觉得操作数组更容易。答案 0 :(得分:1)
为什么要将它们放在数组中?它们已经结构化,直接用作XML。
有SimpleXML
和DOMDocument
,现在它取决于您想要对数据做什么(您没有提到),哪一个更适合您。扩展您的问题以获取代码示例。
编辑:以下是如何使用SimpleXML处理文档的示例:
$url = "http://api.lemonfree.com/listings?key=xxxx&make=ford&model=mustang";
$ns_lf = "http://api.lemonfree.com/ns/1.0";
$response = simplexml_load_file($url);
// children() fetches all nodes of a given namespace
$result = $response->children($ns_lf)->result;
// dump the entire <lf:result> to see what it looks like
print_r($result);
// once the namespace was handled, you can go on normally (-> syntax)
foreach ($result->item as $item) {
$title = $item->xpath("lf:attr[@name='title']");
$state = $item->xpath("lf:attr[@name='state']");
// xpath() always returns an array of matches, hence the [0]
echo( $title[0].", ".$state[0] );
}
答案 1 :(得分:0)
也许您应该查看SimplePie,它将XML提要解析为数组或对象(嗯,其中一个:D)。我认为它也适用于名称空间和属性。
一些好处包括它的GPL许可证(它是免费的)和它的支持社区。 p>
答案 2 :(得分:0)
SimpleXML是读/写XML文件的最佳方式。通常它就像使用数组一样简单,除非在你的情况下,因为涉及XML命名空间并且它使事情变得复杂。此外,用于存储属性的格式很糟糕,所以不是易于使用而且显而易见它有点复杂,所以这就是你正在寻找的东西,这样你就可以继续为你做一些更有趣的事情:
$response = simplexml_load_file($url);
$items = array();
foreach ($response->xpath('//lf:item') as $item)
{
$id = (string) $item['id'];
foreach ($item->xpath('lf:attr') as $attr)
{
$name = (string) $attr['name'];
$items[$id][$name] = (string) $attr;
}
}
您将在$items
数组中拥有所需的一切,使用print_r()
查看内部的内容。 $url
应该是该lemonfree API的URL。该代码假定一个属性不能有多个值(例如多个图像)。
答案 3 :(得分:0)
这是我将从客户端电子邮件地址簿系统返回的XML解析为数组的方式,以便我可以在页面上使用它。我认为使用XML解析器是PHP的一部分。
这是文档http://www.php.net/manual/en/ref.xml.php
$user_info = YOUR_XML
SETS $xml_array AS ARRAY
$xml_array = array();
// SETS UP XML PARSER AND PARSES $user_info INTO AN ARRAY
$xml_parser = xml_parser_create();
xml_parse_into_struct($xml_parser, $user_info, $values, $index);
xml_parser_free($xml_parser);
foreach($values as $key => $value)
{
// $value['level'] relates to the nesting level of a tag, x will need to be a number
if($value['level']==x)
{
$tag_name = $value['tag'];
// INSERTS DETAILS INTO ARRAY $contact_array SETTING KEY = $tag_name VALUE = value for that tag
$xml_array[strtolower($tag_name)] = $value['value'];
}
}
如果你var_dump($ values)你应该看到你的信息所处的数据级别,我认为上面的XML将是4,所以你可以通过改变过滤掉你不想要的任何东西$ value ['level'] == x的值达到要求的水平,即。 $值[ '电平'] == 4。
这应该将$ xml_array作为数组返回$ xml_array ['title'] ='二手2005 Ford Mustang V6 Deluxe'等。
希望有所帮助