Php 如何仅获取所需的xpath元素?

Php 如何仅获取所需的xpath元素?,php,xml,xpath,simplexml,Php,Xml,Xpath,Simplexml,我有一个xml文件,我想将节点的秩属性存储在一个变量中 我试过: echo $var = $xmlobj->xpath("//Listing[@rank]"); 它只打印ArrayArray,但没有效果 如何做到这一点 if($xmlobj = simplexml_load_string(file_get_contents($xml_feed))) { foreach($xmlobj as $listing) {

我有一个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);

            }
      }
给你

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

在使用发布的示例xml后进行编辑:

  • 我最初的回答有点偏离正轨——如果所选元素有内部文本(这里不是这种情况),对字符串的转换将为您提供所选元素的内部文本
  • “//Listing[@rank]”
    选择所有具有“rank”属性的“Listing”元素。如果要选择属性本身,请使用
    “//Listing/@rank”
  • 要输出属性,请使用simplexmlement和数组语法:
    $xmlement['rank']
因此,在你的情况下:

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

应该有用


在第一种情况下,$xmlElement将只包含'rank'属性,而在第二种情况下,它将包含完整的'Listing'元素(因此允许标题输出)。

感谢回复Henrik。不幸的是,它不起作用,我的代码实现在上面?嗯,奇怪-它打印了什么?好的,这会提示xpath实际上不匹配任何东西-你能发布一个xml示例吗?谢谢你的帮助,在上面发布了好的,花了一段时间-自从上次使用simpleXML以来,我似乎忘记了一些基本知识;)
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
    }
}