使用php从两个xml文件中查找不同的值

时间:2014-01-06 09:05:14

标签: php xml

我有一些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中的多个表中提取不同。

1 个答案:

答案 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