将html标签转换为php

时间:2016-04-24 15:02:38

标签: php jquery html dom

我有一个我想要转换的合作伙伴的系统状态页面,以便我可以自动将其输入到我的服务页面。服务的状态由<span>类提供。我知道这远非理想,但这是他们提供更新的唯一方式。

以下是HTML的副本:

<ul class="item-3">
    <li class="status service1">
        <span class="icon"></span>
        <h6>
        SERVICE 1
        </h6>
        <p>
        Updated:
        9:52 AM CST Apr, 24
        </p>
        <span class="arrow up"></span>
    </li>
    <li class="status service2">
        <span class="icon"></span>
        <h6>
        SERVICE 2
        </h6>
        <p>
        Updated:
        9:52 AM CST Apr, 24
        </p>
        <span class="arrow up"></span>
    </li>
    <li class="status service3">
        <span class="icon"></span>
        <h6>
        SERVICE 3
        </h6>
        <p>
        Updated:
        9:52 AM CST Apr, 24
        </p>
        <span class="arrow up"></span>
    </li>
</ul>

我需要获取<span class="arrow up">值,因为这是服务状态,<li class="status service3">因为这会告诉我它是什么服务。

由于我的状态页API使用的是ID,而不是&#34; up / down&#34;等我将需要状态和服务在数组中,所以我可以将它们转换为我的格式 - 希望这是有道理的!

2 个答案:

答案 0 :(得分:0)

使用loadHTML方法

<?php
   $str = '<h1>T1</h1>Lorem ipsum.<h1>T2</h1>The quick red fox...<h1>T3</h1>... jumps over the lazy brown FROG';
   $DOM = new DOMDocument;
   $DOM->loadHTML($str);

   //get all H1
   $items = $DOM->getElementsByTagName('h1');

   //display all H1 text
   for ($i = 0; $i < $items->length; $i++)
        echo $items->item($i)->nodeValue . "<br/>";
?>

输出:

 T1
 T2
 T3

答案 1 :(得分:0)

我并不完全确定你想要达到的目标,但我会做出一些假设来澄清我所说的话:

我假设你自己没有生成HTML,但是你想要从问题中出现的HTML中获取某些元素,从而无法将完整的HTML分配给变量。

跨度中的两个可能可以是&#34;向上箭头&#34; &#34;箭头向下&#34; < / em>(事实上,这是两个类,即&#34; arrow&#34; &#34; up&#34; (或者&#34; down&#34;)。因此,如果你想获取这些span元素的所有实例,你可以简单地执行以下操作:

$ElementsArray = document.getElementsByClassName("arrow");

这将为您提供班级所有元素的数组&#34; arrow&#34;无论他们是否也包含课程&#34; up&#34;或者课程&#34; down&#34;。如果你想只能选择所有&#34; up&#34;或&#34; down&#34;你也可以这样做:

$arrayOfUps = document.getElementsByClassName("up");

假设有更多元素包含&#34; up&#34; (例如&#34;电梯上升&#34; & #34;七个&#34; 等)您也可以使用相同的函数来搜索包含两个类名的元素,如下所示:

$arrayOfUps = document.getElementsByClassName("arrow up");

通过这种方式,您确保不会获得包含以下内容的元素:

class =&#34; seven up&#34;,class =&#34; Elev up&#34;等

如果您只想获得所有箭头实例的数组(&#34; up&#34;或&#34; down&#34;)并遍历每个实例,您当然可以执行以下操作:

$searchFor = "arrow";
$results = array();
$arrCounter=0;
var $elementsList= document.getElementsByClassName("arrow");
for ($i=0; i < $elementsList->length; i++) {
   $temp = $elementsList->item($i);
   if (stripos($temp->getAttribute('class'), $searchFor) !== false) {
       $results[$arrCounter] = ( stripos($temp->getAttribute('class'), "up") !== false ) ? "UP" : "DOWN" ;
       $arrCounter++;
   }
}

list-items也一样。

这绝不是优雅的编码,我也会把它变成一个函数,但我只想建议PHP DOM函数用于你建议的目的。

英语不是我的第一语言,所以我可能完全错过了你的观点,在这种情况下,我提前道歉。