Frage

Welche Vorteile gibt es für die Verwendung von XSLT oder LINQ zu XML für HTML -Parsen in C#? Dies ist unter der Annahme, dass die HTML gereinigt wurde, sodass sie gültig ist. Diese Werte werden schließlich in das AC -# -Objekt übergehen, das validiert und verarbeitet werden soll.

Bitte lassen Sie mich wissen, ob diese gültig sind und ob andere Dinge zu berücksichtigen sind.

XSLT -Vorteile:

  • Einfach schnell zu ändern und bereitzustellen
  • Ziemlich bekannt

XSLT -Nachteile:

  • Nicht zusammengestellt, ist also langsamer zu verarbeiten
  • String Manipulation kann umständlich sein
  • Wird schwieriger, am Ende in das C# -Objekt einzusteigen

LINQ zu XML -Vorteilen:

  • Kompiliert, also läuft es schneller
  • Ermöglicht eine bessere Manipulation der String -Streicher

LINQ zu XML -Nachteilen:

  • Muss zum Update zusammengestellt werden

Bearbeiten: Ich sollte klären, ich möchte, dass diese langfristig und die Website ihr Layout einmal aktualisieren. Das war einer der größeren Grund, warum ich dachte, ich würde etwas verwenden, das nicht zusammengestellt wurde.

War es hilfreich?

Lösung

Ohne weiter zu kennen, ist es schwierig, Ihnen allgemeine Empfehlungen zu geben.

Wie auch immer, Sie vergleichen etwas Äpfel und Orangen. LINQ zu XML (und LINQ im Allgemeinen) ist eine Abfragesprache, während XSLT eine Programmiersprache ist, um XML -Baumstrukturen zu transformieren. Dies sind verschiedene Konzepte. Sie würden eine Abfragesprache verwenden, wenn Sie eine bestimmte bestimmte Information von einer Datenquelle extrahieren möchten, um alles zu tun, was Sie damit tun müssen (sei es, dass Felder in einem C# -Objekt festgelegt werden). Eine Transformation dagegen wäre nützlich, um eine XML -Darstellung Ihrer Daten in eine andere XML -Darstellung umzuwandeln.

Wenn Sie also C# -Objekte aus XML erstellen möchten, möchten Sie wahrscheinlich nicht XSLT verwenden, aber eine der anderen Technologien, die vom .NET -Framework angeboten werden, um XML -Daten zu verarbeiten: das alte XmlDocument, XmlReader, XPathDocument, XmlSerializer oder XDocument. Jedes hat seine besonderen Vor- und Nachteile, abhängig von der Eingangsgröße, der Eingangskomplexität, der gewünschten Ausgabe usw.

Da Sie nur mit HTML zu tun haben, möchten Sie sich möglicherweise auch das ansehen HTML Agility Pack auf Codeplex.

Andere Tipps

Da Sie zu C#gehen, werden Ihre Daten irgendwann durch Linq (oder einen anderen XML -Code für .NET) durchgehen, können Sie alles dort auch dort kleben.

Wenn Sie nicht überzeugende Grund für XSLT haben, wie Sie bereits viel Erfahrung oder die Bereitstellung haben, bevorzugt die Einführung der Textdateien nachdrücklich alles an einem Ort.

Nach meiner Erfahrung ist XSLT prägnanter und lesbarer, wenn Sie sich hauptsächlich mit der Umordnung und Auswahl vorhandener XML -Elemente befassen. XPath ist kurz und leicht zu verstehen, und die XML -Syntax vermeidet Ihren Code mit XElement und XAttribute Aussagen. XSLT funktioniert gut als XML-Baum verwandeln Sprache.

Die Handhabung des Saitens ist jedoch schlecht, die Schleife ist unintuitiv und es gibt kein bedeutungsvolles Konzept von Unterprogrammen - Sie können die Ausgabe einer anderen Transformation nicht verändern.

Wenn Sie also tatsächlich mit Element- und Attributinhalten fassen möchten, ist es schnell zu kurz. Es gibt kein Problem, beides übrigens zu verwenden - XSLT, um die Struktur zu normalisieren (z. B. um sicherzustellen, dass alle table Elemente haben tbody Elemente) und Linq-to-XML, um es zu interpretieren. Die priorisierten bedingten Übereinstimmungsmöglichkeiten bedeuten, dass XSLT im Umgang mit vielen ähnlichen, aber unterschiedlichen Übereinstimmungen einfacher zu verwenden ist. XSLT ist gut in der Vereinfachung der Dokumente, aber es fehlt einfach zu viele grundlegende Funktionen, um für sich selbst ausreichend zu sein.

Nachdem ich von ganzem Herzen auf den Bandwagon von Linq-to-XML gesprungen bin, würde ich sagen, dass es sich mit XSLT weniger überlappt, was auf den ersten Blick erscheinen könnte. (Und ich würde gerne eine XSLT 2.0/XQuery 1.0 -Implementierung für .NET sehen).

In Bezug auf die Leistung sind beide Techniker schnell. Da es so schwierig ist, langsame Operationen auszudrücken, ist es unwahrscheinlich, dass Sie in XSLT versehentlich einen langsamen Fall auslösen (es sei denn, Sie spielen mit Rekursion ...). Im Gegensatz dazu kann LINQ zu XML Power es auch langsam machen: Verwenden Sie einfach jedes schwere .NET-Objekt in einer inneren Schleife und Sie haben ein aufstrebendes Leistungsproblem.

Was auch immer Sie tun, versuchen Sie nicht, XSLT zu missbrauchen, indem Sie es verwenden, um etwas anderes als die einfachste Logik auszuführen: Es ist viel wortreicher und weitaus weniger lesbar als das äquivalente C#. Wenn Sie eine Menge Logik benötigen (sogar einfache Dinge wie date > DateTime.Now ? "will be" : "has" Werden Sie in XSLT riesige, aufgeblähte Hacks) und Sie möchten nicht sowohl XSLT als auch LINQ zu XML verwenden. Verwenden Sie LINQ.

HTML Agility Pack?

Lass es mich versuchen.

Sie sollten nicht verwenden entweder Wenn Sie nur versuchen, HTML zu analysieren. Html! = Xml und kann nicht gleich behandelt werden. Zum Beispiel ist die Escape -Sequenz '' in HTML perfekt gültig, ist jedoch keine gültige Entität in einem gültigen XML -Dokument (ohne schweres Durcheinander mit DTDs usw.). Das wird dich beißen, glauben Sie mir!

Ich würde auch empfehlen, die zu verwenden HTML Agility Pack - Brillante Bibliothek.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top