【问题标题】:Searching for a specific value in XML-File using PHP使用 PHP 在 XML 文件中搜索特定值
【发布时间】:2017-03-16 21:10:07
【问题描述】:

我有个小问题:

我有这个 XML 文件:

<response>
    <game_count>768</game_count>
    <games>
        <message>
            <appid>730</appid>
            <playtime_forever>549</playtime_forever>
        </message>
        <message>
            <appid>1300</appid>
            <playtime_forever>0</playtime_forever>
        </message>
        <message>
            <appid>1309</appid>
....

我尝试搜索值appid == '730',但不幸的是没有任何帮助。

E.G 我试过这个:

$game = new SimpleXMLElement($account_game_data);
$res = $game->xpath("games/message/appid[. = 730]");
print_r($res);

我的结果应该是&lt;appid&gt;730&lt;/appid&gt;&lt;playtime_forever&gt;549&lt;/playtime_forever&gt;&lt;/message&gt; as SimpleXMLElement

如果需要任何代码,我会发布。

【问题讨论】:

  • 在你的最终结果中,兄弟标签也被捕获了,应该是这样吗?
  • @RomanPerekhres 它工作得很好。至少我有一个错误,这与您的代码无关。它导致game-var 为空。感谢您的帮助

标签: php arrays xml xpath


【解决方案1】:

使用以下方法:

$game = new \SimpleXMLElement($account_game_data);
$res = $game->xpath('games/message[appid="730"]');
print_r($res[0]->asXML());

输出:

<message>
            <appid>730</appid>
            <playtime_forever>549</playtime_forever>
        </message>

message[appid="730"] - 匹配具有子 appid 且值为 730message 元素

【讨论】:

  • 不用..选择父级,你可以把路径的结尾放在谓词中:games/message[appid="730"]。您甚至可以选择匹配的第一个“消息”的子代:games/message[appid="730"][1]/*(然后您必须循环它们以使用 SimpleXMLElement::asXML() 显示它们)
  • 奇怪,我没有这个问题:eval.in/755883(也许注意我使用的引号)。
  • 谓词前的斜线需要去掉。
  • @CasimiretHippolyte,今天对我来说已经足够了(格林威治标准时间 +02:00。深夜)。你的建议是正确的。我已经更新了你的表情。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 2015-08-15
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多