как мне проанализировать эти XML данных и получить точный результат? - PullRequest
0 голосов
/ 01 августа 2020

строгий текст У меня есть следующие 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>

Как бы мне проанализировать это таким образом, чтобы, если бы я хотел получить идентификатор пользователя, ищите электронную почту пользователя?

Например, если бы я проанализировал эти данные, а затем поискал электронную почту someEmail@yahoo.com, я бы получил обратно идентификатор 123456 . Если я буду искать anotherEmail@gmail.com, я верну ID 654321 .

Следующий код помещает все только в массив, но я не уверен, как я может выполнить поиск в этом массиве с помощью электронной почты и получить уникальный идентификатор:

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

var_dump($array);

Ответы [ 2 ]

1 голос
/ 01 августа 2020

Использование json_encode / json_decode не очень хорошо с XML, и если вы используете XPath, это может быть проще для поиска (хотя иногда может потребоваться время для изучения).

Здесь используется Выражение XPath (например) //User[@email="anotherEmail@gmail.com"]. Это означает, что любой элемент <User> с атрибутом email (поскольку он начинается с @) равен искомой строке.

Поскольку xpath() возвращает список совпадений, используйте [0] просто использовать первый ...

$xml = simplexml_load_string($myXML, "SimpleXMLElement", LIBXML_NOCDATA);

$email = "anotherEmail@gmail.com";

$user = $xml->xpath('//User[@email="'.$email.'"]')[0];
echo $user['id']."=>".$user->Server['machineIdentifier'].PHP_EOL;

который с образцами данных дает ...

654321=>sadas6d54a6s54d65a4sd

Я только что отобразил пару деталей из данных, чтобы показать как использовать значения в Simple XML.

1 голос
/ 01 августа 2020

Получить пользовательские данные из проанализированного массива с индексом User. Затем вы можете выполнить итерацию по этому массиву, чтобы сформировать новый массив, в котором будут храниться требуемые идентификаторы с соответствующими идентификаторами электронной почты.

$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'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...