如何在php中通过file_get_content显示特定的div标签

时间:2016-11-16 22:24:09

标签: php html json

我正在处理一项作业,我希望在此作业中显示特定的<div>标签,如果用户处于开启或关闭状态,则是用户或向上用户。 这是名为dom.html的html代码 我还想照顾嵌套和无内容的内容

<html>
<head>
    <title>Welcome to gaming website</title>
</head>
<body>
<div class="on">
    <p>You are in on class</p>
</div>
<div class="off">
    <div class="up-user">
        <p>you are in off up-user class</p>
    </div>
    <div class="down-user">
        <p>you are in off down-user class</p>
    </div>
</div>
</body>
</html>

我编写了以下php代码以实现这一目标。

<?php
$myjson = '{"user": "down-user", "status": "on"}';
$result =json_decode($myjson, true);
$user = $result["user"];
$status=  $result["status"];
$html = file_get_contents('dom.html');
if ($user == 'down-user'  and $status == 'on'){
    $down-user-off= explode( '<div class="on">' , $html);
    $down-user-off-end = explode("</div>" , $down-user-off[1] );
    echo $down-user-off-end[0];
}elseif ($user == 'up-user'  and $status == 'off'') {
    $up-user-off = explode( '<div class="up-user">' , $html );
    $up-user-off-end = explode("</div>" , $up-user-off[1] );
    echo $up-user-off-end[0];
}

这只给了div里面的内容,不显示html head和body标签。 可以显示所有代码,即html热体,并跳过特定的div标签。 例如,我想跳过

<div class="on">
    <p>You are in on class</p>
</div>

从代码中显示所有其他html代码。

1 个答案:

答案 0 :(得分:0)

您可以使用SimpleXMLElement并使用xpath selectors将html解析为XML。

$xmlWrapper = new SimpleXMLElement($html);
if ($user == 'down-user'  and $status == 'on'){
    $onElements = $xmlWrapper->xpath('//div[@class="on"]');
    if (is_array($onElements) && count($onElements)) {
        $onElement = $onElements[0];
        echo 'on : '.$onElement->asXML();
    }
}
//and so on for the other cases...

您可以在this php fiddle

中试验此代码

修改

在你的反馈中,你提到你想维护html的其他部分(例如带有样式标签的标题)等......所以在这种心态中,你有几个选项(但这些不是唯一的方法) - 请参阅下面的列表。模板的其他选项包括模板库 - 例如TwigplatesSmarty - 请参阅this article

  1. 根据用户状态的值添加条件样式(到标题标记):

    一个。在标题中添加<style>标记:

    <style> #{styles} </style>

    湾运行str_replace

    if ($user == 'down-user' and $status == 'on'){ $styles = '.on { display: block;} .off { display: none; }'; } else if ($user == 'up-user' and $status == 'off') { $styles = '.on, .down-user { display: none;} .off { display: block; }'; } str_replace('#{styles}',$styles,$page);

    (请参阅phpfiddle

  2. 有条件地添加html主要内容:

    一个。添加正文模板:

    <body>#{body}</body>

    湾根据用户状态的值替换正文模板文本:

    if ($user == 'down-user' && $status == 'on'){ //this could be saved in another file, //and pulled in using require, file_get_contents(), etc $bodyHTML = '<div class="on"> <p>You are in on class</p> </div>'; } else if ($status == 'off') { $bodyHTML = '<div class="off">'; if ($user == 'up-user') { $bodyHTML .= ' <div class="down-user"> <p>you are in off down-user class</p> </div>'; } else { $bodyHTML .= '<div class="up-user"> <p>you are in off up-user class</p> </div>'; } $bodyHTML .= '</div>'; } echo str_replace('#{body}',$bodyHTML,$page);

    (见phpfiddle example