我正在尝试从外部大型xml文件中获取信息;从文件1( vehicleList.xml )和文件2( CheckVehicles.xml )到PHP文件。 XML文件2中的所有值都在XML文件1中。我只想在文件1中显示XML文件2中的值。
我的foreach
循环代码可以带来多达130个项目的结果(即如果我将XML文件中的项目减少到130个项目/节点)。但是,如果我删除if语句,我可以从XML文件1中获取所有3340项/车辆。
我哪里错了?我试过阵列但是失败了。
这是我的代码:
//XML FILE 1 with 1300 items
$myXML = new SimpleXMLElement('CheckVehicles.xml', NULL, TRUE);//
foreach($myXML->root->item as $item){
$listArrayNew[(int)$item->value] = (int)$item->value;
}
//XML FILE 2 with 3340 vehicles
$parser = new SimpleXMLElement('vehicleList.xml', NULL, TRUE);
foreach ($parser->GetVehiclesListResponse->GetVehiclesListResult->Vehicle as $Vehicle) {
if($listArrayNew[(int)$Vehicle->ID] == (int)$Vehicle->ID){
$vehicle = $Vehicle->Description;
$regNumber = $Vehicle->RegistrationNumber;
$siteID = $Vehicle->SiteID;
$row .= "<tr>
<td>".$vehicle."</td>
<td>".$regNumber."</td>
<td>".$siteId."</td>
</tr>";
}
}
以下是XML文件:
XML文件1: vehicleList.xml
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope>
<GetVehiclesListResponse>
<GetVehiclesListResult>
<Vehicle>
<ID>153</ID>
<SiteID>11</SiteID>
<GroupID>3</GroupID>
<Description>A.O Basid KAR 459 E</Description>
<RegistrationNumber>KAR 459 E</RegistrationNumber>
</Vehicle>
..............................
<Vehicle>
<ID>3340</ID>
<SiteID>25</SiteID>
<GroupID>4</GroupID>
<Description>UAR 712B White Nissan Tiida (Deus Mubangizi)</Description>
<RegistrationNumber>UAR 712B</RegistrationNumber>
</Vehicle>
</GetVehiclesListResult>
</GetVehiclesListResponse>
</soap:Envelope>
XML文件2: CheckVehicles.xml
<?xml version="1.0" encoding="utf-8"?>
<Result>
<root>
<item>
<index>0</index>
<value>153</value>
</item>
...................
<item>
<index>1300</index>
<value>128</value>
</item>
</root>
</Result>
答案 0 :(得分:1)
我不知道你的错在哪里。但是,如果您想根据第一个文件中的条件(例如ID /唯一编号)从第二个文件中选择元素,我建议您在您的情况下使用xpath:
/*/root/item/value
)ID
中的/*/GetVehiclesListResponse/GetVehiclesListResult/Vehicle
)。最后一点可以通过使用Is there anything for XPATH like SQL “IN”?中概述的技术来实现,该技术创建了一个逗号分隔的数字列表,然后将其与每个元素编号进行比较。
示例:的
考虑第一个文件中的10 000个元素中有2 500个,而第二个文件中有10 000个元素。每个元素都可以通过它的ID进行唯一标识。
第一个文件有这个布局:
<?xml version="1.0"?>
<root>
<item>
<index>0</index>
<id>604</id>
</item>
<item>
<index>1</index>
<id>2753</id>
</item>
...
</root>
第二个文件有这种布局。
<?xml version="1.0"?>
<list>
<item>
<id>1</id>
<some>Number: 33</some>
</item>
<item>
<id>2</id>
<some>Number: 35</some>
</item>
...
</list>
因此,从第一个文件获取所有ID的xpath查询是:
//item/id
第二个文件的查询可以用PHP中的SimpleXML表示为:
$ids = implode(',', $file1->xpath('//item/id'));
$query = '//item[contains(",' . $ids . ',", concat(",", id, ","))]';
您可以在此处找到该示例的示例代码:http://eval.in/6370