<?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;
 }

解决方案 »

  1.   

    你这都不是标准的XML格式,当然会出错
    $XMLstr=  "<?xml version=\"1.0\" encoding="utf-8\"?>".$XMLstr
      

  2.   


    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"
      }
    }我如何拿到这样一个对象的长度和里面的数据啊???
      

  3.   

    http://ca3.php.net/manual/en/simplexmlelement.xpath.php
      

  4.   

    你的这个XML本身有问题,下面是我改过的.$XMLstr=<<<STR
    <?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);