<?php
$XMLstr="<DMResponse><Code>1</Code><Description>Your request was successfully received and processed.</Description><ResultData><Explanation> Here is the response to your request </Explanation>
<GetObjectNamesRs>
<ClientTree>
<ClientName>Client_Week</ClientName>
<SiteTree>
<SiteName>SiteMon</SiteName>
<CampaignTree>
<CampaignName>Cam_Mon_Child_0</CampaignName>
<MailingName>Mon__Mailing</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>Mon__Mailing_1</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>Mon__Mailing_2</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
</Sitetree>
<SiteTree>
<SiteName>Site_Week</SiteName>
<CampaignTree>
<CampaignName>Cam_Week</CampaignName>
</CampaignTree>
<CampaignTree>
<CampaignName>Cam_Week_Child_0</CampaignName>
<MailingName>Weekly__Mailing</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>Weekly__Mailing_1</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>Weekly__Mailing_2</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
<CampaignTree>
<CampaignName>WeeklyCampaign_2009_52</CampaignName>
</CampaignTree>
<CampaignTree>
<CampaignName>C_20080209</CampaignName>
<MailingName>investing_20080209_Other-Copy</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080209_Global-Copy</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080209_Other</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080209_Netease</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080209_Global</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
<CampaignTree>
<CampaignName>C_20080203</CampaignName>
<MailingName>investing_20080203_Netease</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080203_Global</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
<CampaignTree>
<CampaignName>C_20071026</CampaignName>
<MailingName>news_20071026_Other</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>news_20071026_Netease</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>news_20071026_Global</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
</SiteTree>
</ClientTree>
</GetObjectNamesRs>
</ResultData></DMResponse>";这是源XML文档,现在我要把每个ClientName,SiteName,Campaign,MailingName的值按照其对应关系存进一个数组中去。
请高手帮忙解决一下,我用SimpleXMLElement和DOMDocument都没有解析成功,老提示错误。
这是我用DOMDocument写的function ANALYSIS_XML($XMLstr)
{
$XMLDoc = new DOMDocument();
$XMLDoc->Load($XMLstr);
$ClientDom = $XMLDoc->getElementsByTagName("GetObjectNamesRs");
$datatable=array("Client","Site","Campaign","Mailing");
$ClientName="";
$SiteName="";
$CamName="";
$i=0;
foreach($ClientDom as $ClientEle)
{
$ClientName=$ClientEle->getElementsByTagName("ClientName");
$SiteDom=$ClientEle->getElementsByTagNam("SiteTree");
if(isset($SiteDom))
{
foreach($SiteDom as $SiteEle)
{
$SiteName=$SiteEle->getElementsByTagName("SiteName");
$CamDom=$SiteEle->getElementsByTagName("CampaignTree");
if(isset($CamDom))
{
$CamName=$CamEle->getElementsByTagName("CampaignName");
if(isset($CamDom->MailingName))
{
foreach($CamDom->MailingName as $MailName)
{
$datatable[$i] = "$ClientName*|*$SiteName*|*$CamName*|*$MailName";
$i++;
}
}
}
}
}
}
return $datatable;
}
$XMLstr="<DMResponse><Code>1</Code><Description>Your request was successfully received and processed.</Description><ResultData><Explanation> Here is the response to your request </Explanation>
<GetObjectNamesRs>
<ClientTree>
<ClientName>Client_Week</ClientName>
<SiteTree>
<SiteName>SiteMon</SiteName>
<CampaignTree>
<CampaignName>Cam_Mon_Child_0</CampaignName>
<MailingName>Mon__Mailing</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>Mon__Mailing_1</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>Mon__Mailing_2</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
</Sitetree>
<SiteTree>
<SiteName>Site_Week</SiteName>
<CampaignTree>
<CampaignName>Cam_Week</CampaignName>
</CampaignTree>
<CampaignTree>
<CampaignName>Cam_Week_Child_0</CampaignName>
<MailingName>Weekly__Mailing</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>Weekly__Mailing_1</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>Weekly__Mailing_2</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
<CampaignTree>
<CampaignName>WeeklyCampaign_2009_52</CampaignName>
</CampaignTree>
<CampaignTree>
<CampaignName>C_20080209</CampaignName>
<MailingName>investing_20080209_Other-Copy</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080209_Global-Copy</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080209_Other</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080209_Netease</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080209_Global</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
<CampaignTree>
<CampaignName>C_20080203</CampaignName>
<MailingName>investing_20080203_Netease</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080203_Global</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
<CampaignTree>
<CampaignName>C_20071026</CampaignName>
<MailingName>news_20071026_Other</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>news_20071026_Netease</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>news_20071026_Global</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
</SiteTree>
</ClientTree>
</GetObjectNamesRs>
</ResultData></DMResponse>";这是源XML文档,现在我要把每个ClientName,SiteName,Campaign,MailingName的值按照其对应关系存进一个数组中去。
请高手帮忙解决一下,我用SimpleXMLElement和DOMDocument都没有解析成功,老提示错误。
这是我用DOMDocument写的function ANALYSIS_XML($XMLstr)
{
$XMLDoc = new DOMDocument();
$XMLDoc->Load($XMLstr);
$ClientDom = $XMLDoc->getElementsByTagName("GetObjectNamesRs");
$datatable=array("Client","Site","Campaign","Mailing");
$ClientName="";
$SiteName="";
$CamName="";
$i=0;
foreach($ClientDom as $ClientEle)
{
$ClientName=$ClientEle->getElementsByTagName("ClientName");
$SiteDom=$ClientEle->getElementsByTagNam("SiteTree");
if(isset($SiteDom))
{
foreach($SiteDom as $SiteEle)
{
$SiteName=$SiteEle->getElementsByTagName("SiteName");
$CamDom=$SiteEle->getElementsByTagName("CampaignTree");
if(isset($CamDom))
{
$CamName=$CamEle->getElementsByTagName("CampaignName");
if(isset($CamDom->MailingName))
{
foreach($CamDom->MailingName as $MailName)
{
$datatable[$i] = "$ClientName*|*$SiteName*|*$CamName*|*$MailName";
$i++;
}
}
}
}
}
}
return $datatable;
}
$XMLstr= "<?xml version=\"1.0\" encoding="utf-8\"?>".$XMLstr
object(SimpleXMLElement)#20 (3) {
["CampaignName"]=>
string(10) "C_20100107"
["MailingName"]=>
array(6) {
[0]=>
string(24) "investing_20100107_Other"
[1]=>
string(26) "investing_20100107_Netease"
[2]=>
string(25) "investing_20100107_Global"
[3]=>
string(19) "news_20100107_Other"
[4]=>
string(21) "news_20100107_Netease"
[5]=>
string(20) "news_20100107_Global"
}
["MailingType"]=>
array(6) {
[0]=>
string(15) "StandardMailing"
[1]=>
string(15) "StandardMailing"
[2]=>
string(15) "StandardMailing"
[3]=>
string(15) "StandardMailing"
[4]=>
string(15) "StandardMailing"
[5]=>
string(15) "StandardMailing"
}
}我如何拿到这样一个对象的长度和里面的数据啊???
<?xml version="1.0"?>
<DMResponse>
<Code>1</Code>
<Description>Your request was successfully received and processed.</Description>
<ResultData>
<Explanation> Here is the response to your request </Explanation>
<GetObjectNamesRs>
<ClientTree>
<ClientName>Client_Week</ClientName>
<SiteTree>
<SiteName>SiteMon</SiteName>
<CampaignTree>
<CampaignName>Cam_Mon_Child_0</CampaignName>
<MailingName>Mon__Mailing</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>Mon__Mailing_1</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>Mon__Mailing_2</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
</SiteTree>
<SiteTree>
<SiteName>Site_Week</SiteName>
<CampaignTree>
<CampaignName>Cam_Week</CampaignName>
</CampaignTree>
<CampaignTree>
<CampaignName>Cam_Week_Child_0</CampaignName>
<MailingName>Weekly__Mailing</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>Weekly__Mailing_1</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>Weekly__Mailing_2</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
<CampaignTree>
<CampaignName>WeeklyCampaign_2009_52</CampaignName>
</CampaignTree>
<CampaignTree>
<CampaignName>C_20080209</CampaignName>
<MailingName>investing_20080209_Other-Copy</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080209_Global-Copy</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080209_Other</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080209_Netease</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080209_Global</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
<CampaignTree>
<CampaignName>C_20080203</CampaignName>
<MailingName>investing_20080203_Netease</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>investing_20080203_Global</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
<CampaignTree>
<CampaignName>C_20071026</CampaignName>
<MailingName>news_20071026_Other</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>news_20071026_Netease</MailingName>
<MailingType>StandardMailing</MailingType>
<MailingName>news_20071026_Global</MailingName>
<MailingType>StandardMailing</MailingType>
</CampaignTree>
</SiteTree>
</ClientTree>
</GetObjectNamesRs>
</ResultData>
</DMResponse>
STR;
$dom = new DOMDocument();
$dom->loadXML($XMLstr);$dompath = new DOMXPath($dom);
$nodes = $dompath->query('//ResultData/GetObjectNamesRs/ClientTree/SiteTree/SiteName');$sitename = array();foreach ($nodes as $node)
{
$sitename[] = $node->nodeValue;
}print_r($sitename);