2017-09-14 15 views
3

I持って、次のXML:私はそれを解析すると(つまりは次のようになり、「変数$ ergTitleに「タイトル」の値を保存したいPHPのSimpleXML:複数のエントリの特定の属性値を解析

<doc> 
    <str name="segment">20170913064727</str> 
    <str name="digest">427522d5ceb605f87755c909deac698a</str> 
    <str name="title">AMS Site</str> 
<doc> 

AMSサイト ")。

私は、次のPHPコードを持っている:

になり
foreach($data->result->doc as $dat) { 
    foreach ($dat->str as $att) { 
     foreach ($att->attributes() as $a => $b) { 
      echo $a,'="',$b,"\"\n" . '<br>'; 
      if ($b=='title') { 
       echo "OK"; 
      } 
     } 
    } 
} 

name="segment" 
name="digest" 
name="id" 
name="title" 
OKname="url" 
name="content" 

しかし、どのように、私は今の名前=「タイトル」の値を取得し、私の変数に保存することができますか?

目標:ように私は、「コンテンツ」の内容を印刷したい、「URL」、「タイトル」と(。その検索クエリの結果サイト)

答えて

1

あなたは反復処理しています要素の属性はです。ループでは、要素の値は$dat変数にあります。

<?php 
$data = simplexml_load_file("a.xml"); 
foreach($data->str as $dat) { 
    foreach ($dat->attributes() as $a => $b) { 
     echo $a,'="',$b,'"'; 
     if ($b=='title') { 
      echo "right one"; 
     } 
    } 
    echo " -> ".$dat."<br>"; 
} 

/* result */ 
name="segment" -> 20170913064727 
name="digest" -> 427522d5ceb605f87755c909deac698a 
name="title" right one -> AMS Site 

あなたは変数でそれを見つけたときのタイトルを入れたい場合は、ループ内で同じ変数を使用します。この例では、私があるため、サンプルXMLの1つのforeach()ループを削除する必要がありました

<?php 
$data = simplexml_load_file("a.xml"); 
foreach($data->str as $dat) { 
    foreach ($dat->attributes() as $a => $b) { 
     if ($b=='title') { 
      $title = $dat; 
      break; 
     } 
    } 
} 
echo "Title: ".$dat; // Title: AMS Site 
1

XMLの構造に基づいて、<str>要素をループしての名前属性をコンテンツにマッピングする配列を構築するほうが簡単かもしれません。

$dat = simplexml_load_string($xml); 

$attributes = []; 

foreach ($dat->str as $str) { 
    $attributes[(string) $str['name']] = (string) $str; 
} 

あなたはその後、(、などをしたり、$ergTitle変数に代入)$attributes['title']下の「タイトル」の要素にアクセスすることができます。

関連する問題