首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP从在XML中具有相同父级的另一个子节点的值中获取子值

使用PHP从在XML中具有相同父级的另一个子节点的值中获取子值
EN

Stack Overflow用户
提问于 2018-03-07 21:27:19
回答 2查看 54关注 0票数 0

我有以下XML文档:

代码语言:javascript
复制
<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>时,如何获得badgeid的值?概括地说:我如何从具有相同父母的另一个孩子的价值中得到一个孩子的价值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-07 21:33:43

您可以使用simplexml_load_string()作为XML字符串,如果它是XML文件,则可以使用simplexml_load_file()。然后您可以在$xml->message上迭代并检查$message->badgeid是否是您想要的项目:

代码语言:javascript
复制
$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
}
票数 0
EN

Stack Overflow用户

发布于 2018-03-08 07:04:17

您还可以使用xpath表达式并使用$badgeid作为参数:

代码语言:javascript
复制
$expression = "/response/message[./badgeid='$badgeid']";

例如,您可以使用SimpleXMLElementDOMDocument

代码语言:javascript
复制
$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;
}

演示

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49161501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档