2010-12-19 107 views
0

我要在这里疯狂......再次!无xpath从simplexmlobject获取字符串

我有这个SimpleXML的文件:

SimpleXMLElement Object 
(
    [PubmedArticle] => Array 
     (
      [0] => SimpleXMLElement Object 
       (
        [MedlineCitation] => SimpleXMLElement Object 
         (
          [@attributes] => Array 
           (
            [Owner] => NLM 
            [Status] => In-Process 
           ) 

          [PMID] => 20538400 
          [DateCreated] => SimpleXMLElement Object 
           (
            [Year] => 2010 
            [Month] => 07 
            [Day] => 08 
           ) 

          [Article] => SimpleXMLElement Object 
           (
            [@attributes] => Array 
             (
              [PubModel] => Print-Electronic 
             ) 
etc..... 

我想有 “dateCreated会”,在这种特别的方式:2010-07-08 下面的代码工作...:

foreach ($xml->xpath('//MedlineCitation') as $MedlineCitation) 
{ 

    foreach ($MedlineCitation->DateCreated as $date) 
    { 
      foreach ($date as $ymd) 
      { 
      $datecreated .= $ymd . "-"; 
      } 
    $datecreated = substr($datecreated, 0, -1); 
    echo $datecreated; 
    $datecreated = ""; 
    } 
} 

输出:2010-07-08 但是...我希望它没有XPath的,因为我需要另一个代码和平在这个“foreach循环”不使用XPath工作...

此代码不会不工作....:

foreach ($xml->PubmedArticle as $MedlineCitation) 
{ 
     foreach ($MedlineCitation->DateCreated as $date) 
     { 
      foreach ($date as $ymd) 
      { 
      $datecreated .= $ymd . "-"; 
      } 
     $datecreated = substr($datecreated, 0, -1); 
     echo $datecreated; 
     $datecreated = ""; 
     } 
} 

而且这也没有炒锅...:

foreach ($xml->PubmedArticle as $MedlineCitation) 
    { 
    $datecreated = ""; 

    $datecreated = $MedlineCitation->DateCreated->Year; 
    $datecreated = $datecreated . "-" . $MedlineCitation->DateCreated->Month; 
    $datecreated = $datecreated . "-" . $MedlineCitation->DateCreated->Day; 
    echo $datecreated; 
    } 

最好的问候! 泰斯

回答

1

看起来你对SimpleXML中XML结构的访问方式有点困惑。为了让您的日期,你可以内循环每个MedlineCitation每个PubmedArticle像:

// Loop over each <PubmedArticle> 
foreach ($xml->PubmedArticle as $article) 
{ 
    // Loop over each <MedlineCitation> within this <PubmedArticle> 
    foreach ($article->MedlineCitation as $citation) { 
     // Get formatted created date 
     $date_created = sprintf(
      "%04d-%02d-%02d", 
      $citation->DateCreated->Year, 
      $citation->DateCreated->Month, 
      $citation->DateCreated->Day 
     ); 
     echo $date_created . PHP_EOL; 
    } 
} 

如果只有过一个MedlineCitation一个PubmedArticle然后内环是不必要的,你可以做内:

// Loop over each <PubmedArticle> 
foreach ($xml->PubmedArticle as $article) 
{ 
    // Use the <MedlineCitation> within this <PubmedArticle> 
    $citation = $article->MedlineCitation; 
    // Get formatted created date 
    $date_created = sprintf(
     "%04d-%02d-%02d", 
     $citation->DateCreated->Year, 
     $citation->DateCreated->Month, 
     $citation->DateCreated->Day 
    ); 
    echo $date_created . PHP_EOL; 
} 
+0

谢谢!这是解决方案!我错过了结构中的一个层次! – Thijs 2010-12-20 07:58:13

0

假设你已经加载XML文件内容到$ XML那就试试这个片断

//

$ YY = $ XML-> DateCreated->年; $ mm = $ xml-> DateCreated-> Month; $ dd = $ xml-> DateCreated-> Day;

$ datecreated = $ yy .'-'。$ mm .'-'。$ dd; // yyyy-mm-dd

echo $ datecreated;

// 希望得到这个帮助!

+0

它不工作,我得到这个---------- – Thijs 2010-12-19 20:30:15

+0

它工作时,我在foreach循环中使用整个路径...所以它看起来像$ MedlineCitation不填充...?在:“foreach($ xml-> PubmedArticle as $ MedlineCitation)”循环...? – Thijs 2010-12-19 20:36:33