1

ノードのランク属性を変数に格納する xml ファイルがあります。

私は試した:

echo $var = $xmlobj->xpath("//Listing[@rank]");

無駄に、単にArrayArrayを出力します。

これはどのように行うことができますか?

if($xmlobj = simplexml_load_string(file_get_contents($xml_feed)))
      {
            foreach($xmlobj as $listing)
            {

                  // echo 'Session ID: ' . $sessionId = $listing->sessionId . '<br />';
                  // echo 'Result Set: ' . $ResultSet = $listing->ResultSet . '<br />';

                  print_r($xmlobj->xpath("//Listing[@rank]"));

                  // $result = $xmlobj->xpath("/page/");
                  // print_r($result);

            }
      }

ヘンリックの提案:

foreach($xmlobj as $listing)
{
      $var = $xmlobj->xpath("//Listing[@rank]");

      foreach ($var as $xmlElement) 
      {
            echo (string)$xmlElement;
      }
}

どうぞ

<page>
   <ResultSet id="adListings" numResults="3">
      <Listing rank="1" title="Reliable Local Moving Company" description="TEST." siteHost="www.example.com">
      </Listing>
4

1 に答える 1

2

投稿されたサンプル xml をいじってから編集します。

  • 私の最初の答えはやや軌道から外れていました-文字列にキャストすると、選択した要素の内部テキストが得られます(ここではそうではありません)
  • "//Listing[@rank]"「ランク」属性を持つすべての「リスト」要素を選択します。属性自体を選択する場合は、"//Listing/@rank"
  • 属性を出力するには、配列構文で SimpleXMLElement を使用します。$xmlElement['rank']

だからあなたの場合:

foreach($xmlobj as $listing)
{
    $var = $xmlobj->xpath("//Listing/@rank");
    foreach ($var as $xmlElement) 
    {
      echo $xmlElement['rank'];
    }
}

また

foreach($xmlobj as $listing)
{
    $var = $xmlobj->xpath("//Listing[@rank]");
    foreach ($var as $xmlElement) 
    {
      echo $xmlElement['rank'];
      echo $xmlElement['title']; // Added to demonstrate difference
    }
}

動作するはずです。

最初のケースでは、$xmlElement には「rank」属性のみが含まれますが、2 番目のケースでは、完全な「Listing」要素が含まれます (したがって、タイトル出力が許可されます)。

于 2009-10-01T15:26:46.527 に答える