首页 > 解决方案 > 如何解析这些 XML 数据并获得准确的结果?

问题描述

强文本我有以下 XML 数据:

<?xml version="1.0" encoding="UTF-8"?>
<MediaContainer friendlyName="MyContainer" identifier="container2" machineIdentifier="sadas6d54a6s54d65a4sd" totalSize="82" size="82">
<User id="123456" title="someEmail@yahoo.com" username="someEmail@yahoo.com" email="someEmail@yahoo.com" recommendationsPlaylistId="" thumb="nothing" protected="0" home="0" allowTuners="0" allowSync="0" allowCameraUpload="0" allowChannels="0" allowSubtitleAdmin="0" filterAll="" filterMovies="" filterMusic="" filterPhotos="" filterTelevision="" restricted="0">
  <Server id="000001" serverId="000001" machineIdentifier="sadas6d54a6s54d65a4sd" name="none" lastSeenAt="1596238173" numLibraries="5" allLibraries="0" owned="1" pending="0"/>
</User>
<User id="654321" title="myUser" username="myUser" email="anotherEmail@gmail.com" recommendationsPlaylistId="" thumb="nothing" protected="0" home="0" allowTuners="0" allowSync="0" allowCameraUpload="0" allowChannels="0" allowSubtitleAdmin="0" filterAll="" filterMovies="" filterMusic="" filterPhotos="" filterTelevision="" restricted="0">
  <Server id="000001" serverId="000001" machineIdentifier="sadas6d54a6s54d65a4sd" name="none" lastSeenAt="1596238173" numLibraries="5" allLibraries="0" owned="1" pending="0"/>
</User>
</MediaContainer>

如果我想通过搜索用户的电子邮件来获取用户的 ID,我将如何解析它?

例如,如果我要解析这些数据,然后搜索电子邮件someEmail@yahoo.com,我会得到 ID 123456。如果我搜索anotherEmail@gmail.com我会得到 ID 654321

以下代码仅将所有内容放入一个数组中,但我不确定如何使用电子邮件在该数组中搜索并获取该唯一 ID:

$xml = simplexml_load_string($myXML, "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

var_dump($array);

标签: php

解决方案


User使用索引从解析数组中获取用户数据。然后,您可以遍历该数组以形成一个新数组,该数组将根据相应的电子邮件 ID 存储所需的 ID。

$xml = simplexml_load_string($myXML, "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

$users = $array['User'];

foreach ($users as $user) {
    $id[$user['@attributes']['email']] = $user['@attributes']['id'];
}

echo $id['someEmail@yahoo.com'];

推荐阅读