2016-07-08 14 views
-2

Grüße Stackoverflow! Ich bin auf der Suche nach ein wenig Hilfe beim Parsen eines HTML-Dokuments. Meine Herausforderung ist, dass ich keine Drittanbieter-DLL wie HTML Agility-Pack usw. verwenden kann. Leider muss dies alles über Code oder Refreshen nativ in VS getan werden. Ich habe JSon untersucht, aber ich dachte, dass jemand einen einfacheren Weg hatte. Ich versuche bestimmte Daten von Webseiten wie: http://www.wowhead.com/item=109118/blackrock-ore abzurufen. Es gibt mehrere Abschnitte Suche zum Abrufen von Daten aus: Jeder Abschnitt beginnt mit:Parsing HTML-Dokument, um eine Liste der Elemente abzurufen

new Listview({template: 

und mit in diesem Abschnitt hat „id“. Was ich suche, sind Listen der "IDs" in Bezug darauf, aus welchem ​​Typ der Gegenstand stammt (Spell, NPC, Objekt, etc.).

Leider ist meine Fähigkeit nicht in Einklang mit dieser oder Regex. Ich hatte gehofft, dass mir jemand helfen könnte. Vielen Dank im Voraus für Ihre Zeit.

Edit: Ich endete mit Regex, um alle Werte zu finden. Danke an diejenigen, die geholfen haben.

+3

Mögliches Duplikat von [Was ist der beste Weg, HTML in C# zu analysieren?] (Http://stackoverflow.com/ Fragen/56107/Was ist der beste Weg zu analysieren-html-in-c) auf Alans Antwort zu sehen, zeigt es, wie Sie dies tun können, ohne eine Bibliothek von Drittanbietern zu verwenden, verwenden Sie Regex nicht zu analysieren eine bekannte Sprache wie HTML – abc123

+0

Diese Antwort funktioniert eigentlich nicht. Es gibt keine Browser-Methode in WebBrowser(). –

Antwort

0

Nun, Hunderte von SO Benutzer sagen Sie not to regex HTML, aber Sie technisch den Inhalt innerhalb <script>...</script> Tags Schaben, so Sie in der Lage sein kann, mit diesem wegzukommen.

Lassen Sie uns einen Riss machen.

Nach der Überprüfung der Seitenquelle scheint der JS innerhalb der <script>...</script> Tags konsistent formatiert zu sein. Das macht unsere Jobs einfach.

template:\s'([^']++)',\sid:\s'([^']++)' 

Wir wissen, dass das id Attribut das Attribut template folgen. Wir wissen auch, dass der Entwickler dieser Webseite konsistent einfache Anführungszeichen verwendete, um seine id und template Werte zu umgeben. Daher erfassen wir die Inhalte in diesen einfachen Anführungszeichen, die den template und id Attributnamen folgen, unter Verwendung '([^']++)'

+0

Vielen Dank für die Erklärung der Regex für mich. Frage aber. Wie analysiere ich nach Artikel, wenn Artikel existiert? Also eine Seite hat einen "Zauberspruch" und der andere nicht? Ich möchte den Namen jedes Vorlagenelements erhalten und dann die IDs darin speichern. Ich weiß, ich bin in das Reich der Kopie Pasta und ich bin nicht Fan, wie ich glaube, ich sollte es herausfinden, mit etwas Hilfe, um sicherzustellen, dass ich es lerne. Aber vielleicht könnten Sie mir ein bisschen Beispielcode geben, damit ich den Rest ausarbeiten kann? –

+1

Es tut mir leid, aber ich bin mir nicht sicher, was Sie fragen. Nach Artikel gehe ich davon aus, dass du die 'Listview' meinst. Ich nehme auch an, dass Sie unter "Name jedes Vorlagenelements" den Wert der Vorlageneigenschaft innerhalb einer "Listenansicht" verstehen. Ist das korrekt? – wpcarro

+1

In dieser Regex wird der Wert des Attributs 'template' für das Konstruktionsobjekt 'Listview' und der Wert des Attributs 'id' für genau dieses Konstruktionsobjekt erfasst. C# hat höchstwahrscheinlich eine Möglichkeit, auf "Capture Groups" zuzugreifen, also finde alle Übereinstimmungen in der Seitenquelle, iteriere sie und baue die notwendige Datenstruktur, die du benötigst, indem du die erste Gruppe (dh $ 1) für die Vorlagenelementname und Erfassungsgruppe zwei (dh $ 2) für die ID. Ich bin mir nicht sicher, ob ich Ihnen weiter helfen kann ... – wpcarro

Verwandte Themen