Php 如何解析这些XML数据并获得准确的结果?

Php 如何解析这些XML数据并获得准确的结果?,php,Php,strong文本我有以下XML数据: <?xml version="1.0" encoding="UTF-8"?> <MediaContainer friendlyName="MyContainer" identifier="container2" machineIdentifier="sadas6d54a6s54d65a4sd" totalSize="82"

strong文本我有以下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>

使用
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'];

使用
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'];

使用
json\u encode
/
json\u decode
对XML不是很好,如果使用XPath,搜索会更容易(尽管有时需要花时间学习)

这使用了一个XPath表达式(例如)
//User[@email=”anotherEmail@gmail.com“]
。这意味着具有
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

我刚刚展示了数据中的一些细节,以展示如何使用SimpleXML中的值。

使用
json\u编码
/
json\u解码
对XML不是很好,如果使用XPath,搜索起来会更容易(尽管有时需要花时间学习)

这使用了一个XPath表达式(例如)
//User[@email=”anotherEmail@gmail.com“]
。这意味着具有
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

我刚刚展示了数据中的一些细节,以展示如何使用SimpleXML中的值将引发语法错误。请提供实际的可复制代码。我编辑了代码$myXML是我发布的示例XML内容($code>$XML=simplexml\u load\u string($myXML),“simplexmlement”,LIBXML\u NOCDATA)将引发语法错误。请提供实际的可复制代码。我编辑了代码$myXML是我发布的示例XML内容谢谢,这很有效,但我收到了一封未定义索引的电子邮件,内容如下:
$id[$user['@attributes']['email']=$user['@attributes']['id']对于问题中存在的XML,它不会抛出任何错误。原来的XML结构完全相同吗?我明白了。我使用
file\u get\u contents
获取XML,因为它不是本地XML文件,而是来自API调用的响应。我想知道这是否是它出错的原因。我已经将你的回答标记为已接受,因为你的代码确实按其预期的方式工作,我可能只是在URL上使用了
文件获取内容
。谢谢,这是有效的,但我收到了一封未定义索引的电子邮件,用于以下行
$id[$user['@attributes']['email']=$user['@attributes']['id']
对于问题中存在的XML,它不会引发任何错误。原始XML结构完全相同吗?我明白了。我使用
file\u get\u contents
获取XML,因为它不是本地XML文件,它是来自API调用的响应。我想知道这是否是其错误的原因我已将您的回答标记为已接受,因为您的代码不起作用k按照它的意思,我可能只是在URL上使用了
file\u get\u contents
,把格式弄乱了