2016-04-24 13 views
-1

Ich habe eine Systemstatus-Seite von einem Partner, den ich zu konvertieren versuche, so dass ich seine Eingabe in meine Service-Seite automatisieren kann. Der Status des Dienstes wird von einer Klasse <span> bereitgestellt. Ich weiß, dass dies alles andere als ideal ist, aber nur so können sie Updates bereitstellen.Convert HTML-Tags zu PHP

Nachfolgend finden Sie eine Kopie der 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> 

Ich brauche die <span class="arrow up"> Werte zu greifen, da dies der Service-Status ist, und die <li class="status service3"> wie dies sagt mir, welchen Dienst es sich handelt.

Da meine Statusseiten-API IDs und nicht "hoch/runter" usw. verwendet, brauche ich die Status und Dienste in Arrays, damit ich sie in meine Formate konvertieren kann - das macht Sinn!

Antwort

0

Verwenden loadHTML Methode

<?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/>"; 
?> 

Ausgang:

T1 
T2 
T3 
+0

Danke @Vector, aber ich muss dies aus einer vorhandenen HTML-Datei nicht laden. Außerdem gibt die von Ihnen angegebene Lösung den Inhalt der Tags aus, wo ich die Klasse des Tags ausgeben muss. –

0

ich nicht ganz sicher bin, was Sie versuchen zu erreichen, aber ich werde einige Annahmen getroffen werden, um zu klären, was ich sage:

Ich gehe davon aus, dass Sie den HTML-Code nicht selbst generieren, sondern dass Sie bestimmte Elemente aus dem HTML-Code Ihrer Frage auswählen möchten, wodurch es unmöglich wird, t zuzuordnen Er füllt HTML vollständig mit einer Variablen.

Die beiden möglichen Klassen in der Spanne entweder wäre „Pfeil nach oben“ oder „Pfeil nach unten“ (als eine Frage der Tatsache, dass zwei Klassen ist, nämlich „Pfeil“ und „nach oben“ . (oder „down“) Also, wenn für intstance Sie alle Instanzen dieser Spanne Elemente greifen wollen, könnten Sie das folgende einfach tun:

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

Dies wird Ihnen ein Array aller Elemente der Klasse " Pfeil "egal, ob sie auch t enthalten Er klasse "up" oder die Klasse "down". Wenn Sie wollen in der Lage sein, nur alle wählen „up“ oder „down“ Sie das gleiche wie dies nur tun konnte:

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

Unter der Annahme, es gibt mehr Elemente der Klasse „up“ (wie enthalten „Lift up“, „seven up“, etc.) auch die gleiche Funktion für Elemente zur Suche verwenden können beide Klassennamen wie folgt enthalten:

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

diese Weise können Sie sicherstellen, dass Sie don t erhalten Sie auch die Elemente, die enthalten:

Klasse = "sieben up", Klasse = "Aufzug", usw.

Wenn Sie nur ein Array aller Instanzen von Pfeil erhalten möchten (entweder „up“ oder „down“) und durch jede Instanz durchlaufen, können Sie natürlich auch Sie wie folgt vor:

$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++; 
    } 
} 

Die Gleiches gilt für die Listenelemente.

Dies ist keine elegante Kodierung, und ich würde dies auch in eine Funktion verwandeln, aber ich wollte nur die PHP DOM Funktionen vorschlagen, die Sie für den von Ihnen vorgeschlagenen Zweck verwenden.

Englisch ist nicht meine Muttersprache, also habe ich Ihren Punkt vielleicht völlig verpasst, und in diesem Fall entschuldige ich mich im Voraus.

+0

Danke für die ausführliche Antwort! Ja, du hast Recht, ich erzeuge keine HTML-Seite, dies geschieht über den Provider und ich nehme das via wget alle X Minuten). Ich habe noch nie PHP DOM benutzt, könntest du zeigen, wie ich das einrichten würde, um das aus der HTML-Datei zu laden, die ich bekomme? –

+0

@RedSpider Das einfachste wäre, diese PHP Einfach DOM Parser zu verwenden: http://simplehtmldom.sourceforge.net/ _That wird es möglich, Code zu verwenden, wie zum Beispiel: _ '$ html = file_get_html ('http://www.myhtml.com/'); ' –

+0

@RedSpider Wenn das HTML-Dokument, das Sie scannen möchten, sich in derselben Domäne wie Ihr Skript befindet, können Sie es auch in ein * * iframe ** und verwende die ** innerHTML ** des ** iframe **. Die Sicherheit verhindert jedoch die Verwendung von innerHTML in Iframes, die HTML aus einer anderen Domäne enthalten. Der sicherste Weg wäre wahrscheinlich der oben erwähnte DOM-Parser. –