【问题标题】:How to get only required xpath elements?如何仅获取所需的 xpath 元素?
【发布时间】:2009-10-01 15:16:34
【问题描述】:

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

            }
      }

Henrik 的建议:

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>

【问题讨论】:

    标签: php xml xpath simplexml


    【解决方案1】:

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

    • 我最初的回答有些偏离轨道 - 转换为字符串会为您提供所选元素的内部文本,如果它们有的话(这里不是这种情况)
    • "//Listing[@rank]" 选择所有具有 'rank' 属性的'Listing' 元素。如果要自己选择属性,请使用"//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' 元素(因此允许标题输出)。

    【讨论】:

    • 感谢亨利克的回复。不幸的是它不起作用,我的代码实现在上面?
    • 嗯,奇怪 - 它打印什么?
    • 好的,这会暗示 xpath 实际上不匹配任何东西 - 你能发布一个你的 xml 的例子吗?
    • 感谢您的帮助,已在上方发布
    • 好吧,花了点时间 - 自从我上次使用 simpleXML 以来,我似乎忘记了一些基础知识;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2018-12-20
    • 2016-09-02
    • 2017-08-20
    • 2017-12-24
    • 2016-09-30
    相关资源
    最近更新 更多