Ich habe Tausende von SGML-Dokumenten, einige wohlgeformt, einige nicht so gut gebildet. Ich muss bestimmte ELEMENTS in den Dokumenten finden, aber jedes Mal, wenn ich zum Laden gehe und versuche, sie in ein XDocument, XMLDocument oder auch nur einen StreamReader zu lesen, bekomme ich verschiedene XMLException-Fehler.Strategie für die Analyse von Loots und Loots von nicht so gut gebildeten SGML/XML-Dokumenten
Dinge wie "'[' ist ein unerwarteter Token.". Warum? Weil ich ein Dokument mit DOCTYPE wie
<!DOCTYPE RChapter PUBLIC "-//LSC//DTD R Chapter for Authoring//EN" [] >
haben, und ich habe gelernt, dass die „[]“ etwas gültig innen haben muss. Wiederum kontrolliere ich nicht die Erstellung der Dokumente, aber ich muss sie "knacken" und die Daten bekommen, die ich möchte. Ein weiteres Beispiel ist mit einem "unverschlossenen" ELEMENTE, zum Beispiel:
<Caption>Plants, and facilities<hardhyphen><hyphen>Inspection.</Caption>
Diese XMLException ist „Der 'Bindestrich' Start-Tag auf der Linie 27 nicht den End-Tag von 'Caption' überein Zeile 27, Position 58.. " Offensichtlich, oder?
Aber dann ist die Frage, wie Sie tatsächlich bestimmte Elemente in diesen Dokumenten bekommen können, ohne XMLExceptions zu begegnen. Ist ein SAX-Parser der richtige Weg? Ich möchte grundsätzlich das Dokument öffnen, direkt zu dem Element gehen, das ich möchte (ohne sich Gedanken darüber machen zu müssen, was in der Nähe wohlgeformt ist oder nicht), die Daten abrufen und weitermachen. Sollte ich nur vergessen, mit XMLDocument Parsen, XDocument und tun nur einfachen String Ersatz wie
str.Replace("<hardhypen><hyphen>", "-")
und dann versuchen, es in eine der XML-Parser zu laden. Irgendwelche Tipps zu Strategien?
Welche Sprache verwenden Sie? –
Ich kann entweder C# oder VB.NET – Robert4Real
verwenden, wenn es nicht gut gebildet ist, ist es nicht XML und das ist das Problem, das Sie haben. Sie möchten Ihre SGML zuerst in XML umwandeln https://github.com/MindTouch/SGMLReader, http://mmalachowski.blogspot.com/2013/08/performance-test-of-c-html-xpath.html – Jodrell