在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让我尝试一下,谢谢您的建议,至少我可以开始了。。