Bordon - Mo 25.08.14 19:39
Titel: Bestimmte Bereiche aus HTML-Datei auslesen und speichern
Hallo zusammen,
ich möchte von folgender Website
https://www.bsi.bund.de/DE/Themen/ITGrundschutz/ITGrundschutzKataloge/Inhalt/_content/baust/b01/b01.html
die Daten auslesen und ein bestimmter Bereich will ich dann in String Variablen speichern. Dabei handelt es sich um die Bereiche:
XML-Daten
1: 2: 3: 4: 5: 6: 7:
| .... <p><a class="RichTextIntLink Basepage" href="https://www.bsi.bund.de/DE/Themen/ITGrundschutz/ITGrundschutzKataloge/Inhalt/_content/baust/b01/b01000.html" title="B 1.0 Sicherheitsmanagement">B 1.0 Sicherheitsmanagement</a></p>
<p><a class="RichTextIntLink Basepage" href="https://www.bsi.bund.de/DE/Themen/ITGrundschutz/ITGrundschutzKataloge/Inhalt/_content/baust/b01/b01001.html" title="B 1.1 Organisation">B 1.1 Organisation</a></p>
... |
ich möchte aus diesen Zeilen die Teile die in title="..." (also B 1.0 Sicherheitsmanagement, B 1.1 Organisation...) in einem string-Feld abspeichern.
Nun habe ich schon ein wenig mit StreamReader experimentiert, jedoch noch auf kein Ergebnis gekommen. Hab es auch schon hinbekommen die komplette htm-Seite in einen String zu schreiben.
Das wichtigste ist mir allerdings noch nicht gelungen!
Es sollte also so aussehen:
C#-Quelltext
1: 2: 3:
| string a[0] = "B 1.0 Sicherheitsmanagement"; string a[1] = "B 1.1 Organisation"; ... |
Kann mir hierzu jemand einen guten Tipp geben? Ich wäre Euch sehr dankbar.
Freundliche Grüße,
Bordon
Moderiert von Th69: XML-Tags hinzugefügt
Moderiert von Th69: C#-Tags hinzugefügt
Schafschaf - Di 31.03.15 13:39
Hallo,
da kann ich dir das HtmlAgilityPack empfehlen. Das gibt's im Nuget.
So wie ich das sehe, möchtest du von allem Links der Klassen "RichTextIntLink" und "Basepage" das Attribut "title" auslesen.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| string url = "die url deiner seite" HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb(); HtmlAgilityPack.HtmlDocument result = web.Load(url); HtmlNode node = result.DocumentNode;
var res = node.Descendants("a").Where(x => x.Attributes.Contains("class") && x.Attributes["class"].Value.Contains("RichTextIntLink") && x.Attributes["class"].Value.Contains("Basepage"));
foreach(Htmlnode n in res) { hier kommst du mit n.InnerHtml an den inneren Text ran und kannst ihn in eine Liste oder Array schreiben, den musst du noch mit Substring etc. nach "title=" filtern. } |
Ich hoffe dieser kleine Ansatz hat dir geholfen. Viel Spaß noch :)