2009-10-01 90 views
1

我有一个xml文件,我想在一个变量中存储节点的rank属性。如何获取所需的xpath元素?

我想:

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); 

      } 
     } 

Henrik的建议:

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

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

在这里,你去与发布示例XML玩耍后

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

回答

2

编辑:

  • 我最初的回答多少有些偏离轨道 - 铸造成字符串会给你内文本中选定的元件的,如果它们具有一个(而不是在这里的情况下)
  • "//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将仅包含“秩”属性而在第二,它会包含完整的“清单”元件(因此允许的标题输出)。

+0

感谢您的答复亨里克。不幸的是它不起作用,我的代码实现在上面? – 2009-10-01 15:33:34

+0

嗯,奇怪 - 它打印什么? – 2009-10-01 15:35:33

+0

只是一个空白屏幕,并没有错误 – 2009-10-01 15:39:55