我有一些xml文件,如下所示 -
<?xml version="1.0"?>
<contacts>
<contact>
<mobile_no>9829344744</mobile_no>
<name>Sample Name 1</name>
<email>Some Email</email>
</contact>
<contact>
<mobile_no>9829344799</mobile_no>
<name>Sample Name 2</name>
<email>Some Email</email>
</contact>
<contact>
<mobile_no>9829345035</mobile_no>
<name>Sample Name 3</name>
<email>Some Email</email>
</contact>
</contacts>
我有两个以上格式的xml文件。每个文件都有不同的<mobile_no>
但我想从两个文件中提取不同的<mobile_no>
。
我已经尝试并使用以下PHP代码
$arr_filename[] = "file1.xml";
$arr_filename[] = "file2.xml";
$arr_contact = array();
foreach($arr_filename as $filename)
{
$xml = new simpleXMLElement($filename, null, true);
$contact_array1 = $xml->xpath('contact/mobile_no');
for($i=0; $i<count($contact_array1); $i++)
{
$arr_contact[$contact_array1[$i]]=true;
}
}
我发现数组$arr_contact
具有不同的联系号,因为它的关键字
它工作正常,但问题是当文件有大量内容(记录)和使用更多文件(大约10)时,它需要花费太多时间来处理。我想获得更有效的方法来从多个xml文件中提取不同的移动设备。正如我们从mysql中的多个表中提取不同。
答案 0 :(得分:1)
让我们看看,首先合并:
$xml = simplexml_load_string($x1); // assume XML in $x1 and $x2
$xml2 = simplexml_load_string($x2);
// merge $xml2 into $xml
foreach ($xml2->contact as $contact) {
$newcontact = $xml->addChild("contact");
foreach ($contact->children() as $name => $value)
$newcontact->addChild($name, $value);
}
unset($xml2); // dispose $xml2
然后选择:
// use xpath to select <contact> with distinct contact/mobile_no
$results = $xml->xpath("/contacts/contact[not(mobile_no = following::mobile_no)]");
var_dump($results);
看到它有效:https://eval.in/86352