Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php函数中传递xml并使用条件获取通用xml_Php_Xml - Fatal编程技术网

在php函数中传递xml并使用条件获取通用xml

在php函数中传递xml并使用条件获取通用xml,php,xml,Php,Xml,可能重复: ----第一个XML---str1 <HOME> <USER_DETAIL> <LOCATION><![CDATA[MUMBAI]]></LOCATION> <NAME><![CDATA[RAVI]]></NAME> <ID><![CDATA[101]]></ID> </USER_D

可能重复:

----第一个XML---str1

<HOME>
    <USER_DETAIL>
        <LOCATION><![CDATA[MUMBAI]]></LOCATION>
        <NAME><![CDATA[RAVI]]></NAME>
        <ID><![CDATA[101]]></ID>
    </USER_DETAIL>
    <USER_DETAIL>
        <LOCATION><![CDATA[PUNE]]></LOCATION>
        <NAME><![CDATA[MANISH]]></NAME>
        <ID><![CDATA[102]]></ID>
    </USER_DETAIL>
</HOME>

——第二个XML---str2

<USER_DATA>
    <DATA>
        <DOB><![CDATA[2/11/1959]]></DOB>
        <STATUS><![CDATA[single]]></STATUS>
        <PROFILE_PIC><![CDATA[101.JPG]]></PROFILE_PIC>
        <ID><![CDATA[101]]></ID>
    </DATA>
    <DATA>
        <DOB><![CDATA[6/8/1987]]></DOB>
        <STATUS><![CDATA[married]]></STATUS>
        <PROFILE_PIC><![CDATA[102.JPG]]></PROFILE_PIC>
        <ID><![CDATA[102]]></ID>
    </DATA>
</USER_DATA>

我是XML新手。 我有两个xml,如上所述,我想要用户所有数据的通用xml。在两种XML中,常见的是用户的ID。那么,有没有办法将xml传递到函数中,比较第二个xml中的id,获得特定用户的详细信息,并形成所需的(所有详细信息都是通用的)xml。

str1和str2是php变量,分别包含上述xml。

使用以下代码生成新的xml,您可以根据需要更改节点。如果一个文件中有两个XML,可以使用simplexml\u load\u file($filename);加载XML并将其分配给$str1和$str2

$str1 = "<HOME>
<USER_DETAIL>
    <LOCATION><![CDATA[MUMBAI]]></LOCATION>
    <NAME><![CDATA[RAVI]]></NAME>
    <ID><![CDATA[101]]></ID>
</USER_DETAIL>
<USER_DETAIL>
    <LOCATION><![CDATA[PUNE]]></LOCATION>
    <NAME><![CDATA[MANISH]]></NAME>
    <ID><![CDATA[102]]></ID>
</USER_DETAIL>
</HOME>";

$str2 = "<USER_DATA>
<DATA>
    <DOB><![CDATA[2/11/1959]]></DOB>
    <STATUS><![CDATA[single]]></STATUS>
    <PROFILE_PIC><![CDATA[101.JPG]]></PROFILE_PIC>
    <ID><![CDATA[101]]></ID>
</DATA>
<DATA>
    <DOB><![CDATA[6/8/1987]]></DOB>
    <STATUS><![CDATA[married]]></STATUS>
    <PROFILE_PIC><![CDATA[102.JPG]]></PROFILE_PIC>
    <ID><![CDATA[102]]></ID>
</DATA>
</USER_DATA>";

$xml1 = simplexml_load_string($str1);
$xml2 = simplexml_load_string($str1);
//print_r($xml);

$tempArr = array();
foreach( $xml1 as $obj)  {
$id = $obj->ID;
$tempArr["$id"]['LOCATION'] = (string)$obj->LOCATION;
$tempArr["$id"]['NAME'] = (string)$obj->NAME;
}
foreach( $xml2 as $obj)  {
$id = $obj->ID; 
$tempArr["$id"]['DOB'] = (string)$obj->DOB;
$tempArr["$id"]['STATUS'] = (string)$obj->STATUS;
$tempArr["$id"]['PROFILE_PIC'] = (string)$obj->PROFILE_PIC;
}

//print_r($tempArr);

$xml = new DOMDocument('1.0', 'iso-8859-1');

$doc = $xml->createElement('DOCUMENT');
$doc = $xml->appendChild($doc);

foreach( $tempArr as $ky=>$val )  {

$rnod = $xml->createElement('USER_DETAIL');
$rnod = $doc->appendChild($rnod);
//$rnod = $xml->appendChild($rnod);

$dataN0 = $xml->createElement('ID');
$dataN0 = $rnod->appendChild($dataN0);

$nodV = $xml->createTextNode($ky);
$dataN0->appendChild($nodV);

foreach($val as $k=>$v)  {
    $dataN1 = $xml->createElement($k);
    $dataN1 = $rnod->appendChild($dataN1);

    $nodV1 = $xml->createTextNode($v);
    $dataN1->appendChild($nodV1);
}
}

$newXml = $xml->saveXML();
echo htmlspecialchars($newXml);
$str1=”
";
$str2=”
";
$xml1=simplexml\u load\u字符串($str1);
$xml2=simplexml\u load\u字符串($str1);
//打印(xml);
$tempArr=array();
foreach($xml1作为$obj){
$id=$obj->id;
$tempArr[“$id”]['LOCATION']=(字符串)$obj->LOCATION;
$tempArr[“$id”]['NAME']=(字符串)$obj->NAME;
}
foreach($xml2作为$obj){
$id=$obj->id;
$tempArr[“$id”]['DOB']=(字符串)$obj->DOB;
$tempArr[“$id”]['STATUS']=(字符串)$obj->STATUS;
$tempArr[“$id”]['PROFILE\u PIC']=(字符串)$obj->PROFILE\u PIC;
}
//打印(tempArr);
$xml=新的DOMDocument('1.0','iso-8859-1');
$doc=$xml->createElement('DOCUMENT');
$doc=$xml->appendChild($doc);
foreach($ky=>$val的临时值){
$rnod=$xml->createElement('USER_DETAIL');
$rnod=$doc->appendChild($rnod);
//$rnod=$xml->appendChild($rnod);
$dataN0=$xml->createElement('ID');
$dataN0=$rnod->appendChild($dataN0);
$nodV=$xml->createTextNode($ky);
$dataN0->appendChild($nodV);
foreach($val为$k=>$v){
$dataN1=$xml->createElement($k);
$dataN1=$rnod->appendChild($dataN1);
$nodV1=$xml->createTextNode($v);
$dataN1->appendChild($nodV1);
}
}
$newXml=$xml->saveXML();
echo htmlspecialchars($newXml);

您通常不会在“XML”中执行此操作。您可以将XML转换/解析为PHP数组或对象,进行合并,然后将其输出回XML。@deceze K让我尝试一下,谢谢您的建议,至少我可以开始了。。