[英]Get value of child from the value of another child with the same parent in XML using PHP
我有以下XML文檔:
<response>
<message>
<badgeid>13</badgeid>
<level>4672</level>
<completion_time>1518626787</completion_time>
<xp>4922</xp>
<scarcity>9717</scarcity>
</message>
<message>
<badgeid>25</badgeid>
<level>1</level>
<completion_time>1480166791</completion_time>
<xp>25</xp>
<scarcity>3761041</scarcity>
</message>
<message>
<badgeid>21</badgeid>
<level>1</level>
<completion_time>1467581153</completion_time>
<xp>100</xp>
<scarcity>16650345</scarcity>
</message>
</response>
我正在嘗試使用PHP創建一個程序,該程序返回某個“徽章”(總是唯一的)的“稀缺性”。
所以我的問題是:當我從用戶收到的唯一輸入是唯一的badgeid
時,如何獲得<scarcity></scarcity>
的值? 概括地說:如何從同一個父母的另一個孩子的價值中獲得一個孩子的價值?
您還可以使用xpath表達式並將$badgeid
用作參數:
$expression = "/response/message[./badgeid='$badgeid']";
然后,您可以使用SimpleXMLElement或DOMDocument 。
$data = <<<DATA
<response>
<message>
<badgeid>13</badgeid>
<level>4672</level>
<completion_time>1518626787</completion_time>
<xp>4922</xp>
<scarcity>9717</scarcity>
</message>
<message>
<badgeid>25</badgeid>
<level>1</level>
<completion_time>1480166791</completion_time>
<xp>25</xp>
<scarcity>3761041</scarcity>
</message>
<message>
<badgeid>21</badgeid>
<level>1</level>
<completion_time>1467581153</completion_time>
<xp>100</xp>
<scarcity>16650345</scarcity>
</message>
</response>
DATA;
$badgeid = 25;
$xml = simplexml_load_string($data);
$expression = "/response/message[./badgeid='$badgeid']";
$items = $xml->xpath($expression);
if (count($items) === 1) {
echo $items[0]->scarcity;
}
$doc = new DOMDocument();
$doc->loadXML($data);
$xpath = new DOMXpath($doc);
$res = $xpath->query($expression);
if ($res->length === 1) {
echo $res->item(0)->getElementsByTagName("scarcity")->item(0)->nodeValue;
}
你可以使用simplexml_load_string()
為一個XML字符串,或simplexml_load_file()
如果它是一個XML文件。 然后,您可以遍歷$xml->message
並檢查$message->badgeid
是否是您想要的項目:
$xmlstr = '<response>
<message>
<badgeid>13</badgeid>
<level>4672</level>
<completion_time>1518626787</completion_time>
<xp>4922</xp>
<scarcity>9717</scarcity>
</message>
<message>
<badgeid>25</badgeid>
<level>1</level>
<completion_time>1480166791</completion_time>
<xp>25</xp>
<scarcity>3761041</scarcity>
</message>
<message>
<badgeid>21</badgeid>
<level>1</level>
<completion_time>1467581153</completion_time>
<xp>100</xp>
<scarcity>16650345</scarcity>
</message>
</response>';
$badgeid = 21 ; // The value you want to search
$xml = simplexml_load_string($xmlstr);
$scarcity = null ;
foreach ($xml->message as $message) {
if ((string)$message->badgeid == $badgeid) {
$scarcity = (string)$message->scarcity ;
break ;
}
}
// use $scarcity if set.
if (isset($scarcity)) {
// do stuff
echo $scarcity ; // 16650345
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.