我正在处理一项作业,我希望在此作业中显示特定的<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代码。
答案 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的其他部分(例如带有样式标签的标题)等......所以在这种心态中,你有几个选项(但这些不是唯一的方法) - 请参阅下面的列表。模板的其他选项包括模板库 - 例如Twig,plates,Smarty - 请参阅this article。
根据用户和状态的值添加条件样式(到标题标记):
一个。在标题中添加<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)
有条件地添加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);