如何只获得所需的xpath元素?

时间:2009-10-01 15:16:34

标签: php xml xpath simplexml

我有一个xml文件,我想将节点的rank属性存储在变量中。

我试过了:

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>

1 个答案:

答案 0 :(得分:2)

使用发布的示例xml:

进行编辑
  • 我的初步答案有点偏离轨道 - 如果他们有一个(不是这里的情况),那么转换为字符串会给你所选元素的内部文本
  • "//Listing[@rank]"选择拥有'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'属性,而在第二种情况下,它将包含完整的'Listing'元素(因此允许标题输出)。