Beste Weg, um zu analysieren, HTML in Javascript

Ich bin eine Menge ärger lernen RegExp und kommen mit einem guten Algorithmus, um dies zu tun. Ich habe diesen HTML-string, muss ich noch analysieren. Beachten Sie, dass, wenn ich analysieren, ist es immer noch ein string-Objekt und nicht noch HTML an den browser, wie ich brauche, um zu analysieren, bevor es dort ankommt. Die HTML sieht wie folgt aus:

<html>
  <head>
    <title>Geoserver GetFeatureInfo output</title>
  </head>
  <style type="text/css">
    table.featureInfo, table.featureInfo td, table.featureInfo th {
        border:1px solid #ddd;
        border-collapse:collapse;
        margin:0;
        padding:0;
        font-size: 90%;
        padding:.2em .1em;
    }
    table.featureInfo th {
        padding:.2em .2em;
        font-weight:bold;
        background:#eee;
    }
    table.featureInfo td{
        background:#fff;
    }
    table.featureInfo tr.odd td{
        background:#eee;
    }
    table.featureInfo caption{
        text-align:left;
        font-size:100%;
        font-weight:bold;
        text-transform:uppercase;
        padding:.2em .2em;
    }
  </style>

  <body>
    <table class="featureInfo2">
    <tr>
        <th class="dataLayer" colspan="5">Tibetan Villages</th>
    </tr>
    <!-- EOF Data Layer -->
    <tr class="dataHeaders">
        <th>ID</th>
        <th>Latitude</th>
        <th>Longitude</th>
        <th>Place Name</th>
        <th>English Translation</th>
    </tr>
    <!-- EOF Data Headers -->
    <!-- Data -->
    <tr>
    <!-- Feature Info Data -->
        <td>3394</td>
        <td>29.1</td>
        <td>93.15</td>
        <td>བསྡམས་གྲོང་ཚོ།</td>
        <td>Dam Drongtso </td>
    </tr>
    <!-- EOF Feature Info Data -->
    <!-- End Data -->
    </table>
    <br/>
  </body>
</html>

und ich brauche, um es zu bekommen wie diese:

3394,
29.1,
93.15,
བསྡམས་གྲོང་ཚོ།,
Dam Drongtso

Im Grunde ein array...noch besser wenn es passt nach seinem Feld Header und aus welcher Tabelle Sie sind irgendwie, die wie folgt Aussehen:

Tibetan Villages

ID
Latitude
Longitude
Place Name
English Translation

Finden sich JavaScript nicht unterstützt wunderbaren mapping war ein Mist und ich habe was ich will arbeiten bereits. Allerdings ist es sehr, SEHR hart codiert und ich denke, ich sollte wohl RegExp verwenden, um diese zu bewältigen besser. Leider habe ich eine echte harte Zeit :(. Hier ist meine Funktion zum analysieren von meiner saite (sehr hässlich IMO):

    function parseHTML(html){

    //Getting the layer name
    alert(html);
    //Lousy attempt at RegExp
    var somestring = html.replace('/m//\<html\>+\<body\>//m/',' ');
    alert(somestring);
    var startPos = html.indexOf('<th class="dataLayer" colspan="5">');
    var length = ('<th class="dataLayer" colspan="5">').length;
    var endPos = html.indexOf('</th></tr><!-- EOF Data Layer -->');
    var dataLayer = html.substring(startPos + length, endPos);

    //Getting the data headers
    startPos = html.indexOf('<tr class="dataHeaders">');
    length = ('<tr class="dataHeaders">').length;
    endPos = html.indexOf('</tr><!-- EOF Data Headers -->');
    var newString = html.substring(startPos + length, endPos);
    newString = newString.replace(/<th>/g, '');
    newString = newString.substring(0, newString.lastIndexOf('</th>'));
    var featureInfoHeaders = new Array();
    featureInfoHeaders = newString.split('</th>');

    //Getting the data
    startPos = html.indexOf('<!-- Data -->');
    length = ('<!-- Data -->').length;
    endPos = html.indexOf('<!-- End Data -->');
    newString = html.substring(startPos + length, endPos);
    newString = newString.substring(0, newString.lastIndexOf('</tr><!-- EOF Feature Info Data -->'));
    var featureInfoData = new Array();
    featureInfoData = newString.split('</tr><!-- EOF Feature Info Data -->');

    for(var s = 0; s < featureInfoData.length; s++){
        startPos = featureInfoData[s].indexOf('<!-- Feature Info Data -->');
        length = ('<!-- Feature Info Data -->').length;
        endPos = featureInfoData[s].lastIndexOf('</td>');
        featureInfoData[s] = featureInfoData[s].substring(startPos + length, endPos);
        featureInfoData[s] = featureInfoData[s].replace(/<td>/g, '');
        featureInfoData[s] = featureInfoData[s].split('</td>');
    }//end for

    alert(featureInfoData);

    //Put all the feature info in one array
    var featureInfo = new Array();
    var len = featureInfoData.length;
    for(var j = 0; j < len; j++){
        featureInfo[j] = new Object();
        featureInfo[j].id = featureInfoData[j][0];
        featureInfo[j].latitude = featureInfoData[j][1];
        featureInfo[j].longitude = featureInfoData[j][2];
        featureInfo[j].placeName = featureInfoData[j][3];
        featureInfo[j].translation = featureInfoData[j][4];
        }//end for 

    //This can be ignored for now...
        var string = redesignHTML(featureInfoHeaders, featureInfo);
        return string;

    }//end parseHTML

So wie Sie sehen können, wenn der Inhalt in diesem string überhaupt verändert, mein code wird schrecklich gebrochen. Ich möchte vermeiden, dass so viel wie möglich und versuchen, besseren code zu schreiben. Ich Schätze all die Hilfe und Ratschläge, die Sie mir geben können.

Wenn Sie zum generieren des HTML-Codes auf der server-Seite könntest du auch erzeugen, JSON sowie es und pass es in der HTML mit dem Inhalt. Sie nicht haben, zu analysieren, nichts.
Parsen von HTML (oder XML) mit regex ist fast nie eine gute Idee.
stackoverflow.com/questions/1732348/...
Es gibt eine goldene Regel SO: NICHT PARSEN von HTML MIT REGULÄREN AUSDRÜCKEN
Ich wiederhole: stackoverflow.com/questions/1732348/... Wenn unsere Herzen sind rein, wir können stampfen, Regexp Parsen von HTML in unserem Leben! Oder Tony kommen wird.

InformationsquelleAutor elshae | 2010-11-22

Schreibe einen Kommentar