【问题标题】:getting string from simplexmlobject without xpath从没有 xpath 的 simplexml 对象获取字符串
【发布时间】:2010-12-19 20:02:03
【问题描述】:

我又要疯了……又来了!!

我有这个 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;
    }

最好的问候! 泰斯

【问题讨论】:

    标签: php arrays simplexml


    【解决方案1】:

    看起来您只是对如何在 SimpleXML 中访问 XML 结构感到有些困惑。要获取您的日期,您可以在每个 PubmedArticle 中循环每个 MedlineCitation,例如:

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

    如果PubmedArticle 中只有一个MedlineCitation,则不需要内部循环,您可以这样做:

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

    【讨论】:

    • 谢谢!!这就是解决方案!我错过了结构中的一级!
    【解决方案2】:

    假设你已经将xml文件内容加载到$xml然后试试这个sn-p

    //

    $yy = $xml->创建日期->年份; $mm = $xml->创建日期->月份; $dd = $xml->创建日期->日期;

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

    回显 $datecreated;

    // 希望对您有所帮助!

    【讨论】:

    • 当我在 foreach 循环中使用整个路径时它可以工作......所以看起来 $MedlineCitation 没有填充......?在:“foreach ($xml->PubmedArticle as $MedlineCitation)”循环中...?
    猜你喜欢
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多