![]() |
Re: MSXML: Nicht valide Nodes ignorieren
Endlich eine Art Durchbruch...MultipleErrors funktioniert scheinbar nur bei der Schemaüberprüfung, also
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var tmp: IXMLDOMDocument2; lst: IXMLDOMParseErrorCollection; schema : IXMLDOMSchemaCollection2; i: Integer; begin Memo.Clear; tmp := CoDOMDocument60.Create; schema:=CoXMLSchemaCache60.Create; tmp.setProperty('MultipleErrorMessages', true); tmp.loadXML('<test><a></a>[b][/b]</test>'); schema.add('','C:\xsd.xsd'); tmp.schemas:=schema; lst := (tmp.validate as IXMLDOMParseError2).allErrors; for i := 0 to lst.length -1 do begin Memo.Lines.Add(lst.item[i].reason); end; end; Zitat:
Falls wer einen Tipp hat, her damit! MfG Alaitoc PS: Schonmal Danke für die Mühen :> |
Re: MSXML: Nicht valide Nodes ignorieren
Zitat:
Was dein allgemeines Problem angeht: Eine "echte" Möglichkeit wird es wohl nicht geben... man weiß ja nicht wo der Fehler liegt und kann daher wahrscheinlich auch kaum "defekte" Teile ausschließen. Was meine Frage angeht: Hast du schonmal probiert die "nicht-validen" Nodes ausfindig zu machen und bei der Verarbeitung zu ignorieren? |
Re: MSXML: Nicht valide Nodes ignorieren
Liste der Anhänge anzeigen (Anzahl: 1)
Bin grade in gewisser Weise dabei, der MSXML Parser lädt den Text immer von oben nach unten und von innen nach außen...also wie in der Grafik beschrieben:
1.C 2.B 3.A 4.C2 5.B2 6.A2 7.Test In diesen Blöcken...also müsste ich mir theorethisch "nur" eine Funktion schreiben die dann diesen Text "löscht" und weiter validiert, bis halt der ganze Text "richtig" ist. Und dann die Fehler ausgibt und markiert, wenn dann der ganze Text keine XML Fehler hat wird er erst mit dem XSD Schema verglichen... Ist halt nur das Problem das Gegenstück jeweils von der "Fehlerquelle" zu finden. Hmhm werde mal schauen. MfG Alaitoc |
Re: MSXML: Nicht valide Nodes ignorieren
Ja... wie gesagt... das Gegenstück... Es könnte sich ja z.B. auch um Schreibfehler bzw. Auslassungen handeln etc. pp.
Ich kann mich gerade nicht so intensiv damit beschäftigen aber ich freue mich, wenn du mich auf dem Laufenden hälst! :chat: |
Re: MSXML: Nicht valide Nodes ignorieren
Hui...ist doch ziemlich kompliziert, sobald man mal bei einem Element ein / vergisst zum schließen...ich glaub das wird länger dauern mit der Planung *seufz*
Gibts zufällig irgendwo eine feste Dokumentation wie das in welcher Reihenfolge geprüft wird mit der Wohlgeformtheit?^^ Naja werde mich morgen erstmal daran setzen...vll ist es ja machbar mit den Informationen die mir der MSXML Parser liefert. MfG Alaitoc |
Re: MSXML: Nicht valide Nodes ignorieren
Hm naja eine Möglichkeit wäre nun den Text durchzugehen, jeweils den Text von < bis > zu speichern und immer hochzuzählen , bzw. bei </ > runterzuzählen und die Elemente damit zu nummerieren und zu sagen ob es ein Anfangs oder Endelement ist.
Beispiel: 1 2 3 4 3 4 3 2 1 0 <test><a><c></c><c></c></a></test> Falls dann ein Fehler auftritt, sucht man vom Endelement aus das andere Element...indem man die Zahl des Endelements+1 sucht und überprüft ob es ein Anfangselement ist...theorethisch könnte man diese dann ganz leicht entfernen und dann wieder validieren...jedoch ist das nicht umbedingt effizient x) MfG Alaitoc |
Re: MSXML: Nicht valide Nodes ignorieren
Zitat:
z.B.
Delphi-Quellcode:
<test><a></test>
<test><a></test></a> |
Re: MSXML: Nicht valide Nodes ignorieren
Naja das was du jetzt da beschreibst, wäre ja ein Fehler:
"Endtag /test stimmt nicht mit Anfangstag a überein" oder so Und naja ---1---2---1--- <test><a><test> Da wüßte ich ja trotzdem das nu <test>.nummer+1 = <a> das Anfangsstück ist auch wenn es fehlerhaft ist. Edit: Zumindest sollte ich so immer wissen welche beiden "Elemente" zusammengehören...auch wenn sie fehlerhaft sind...natürlich müsste ich dann auch noch einige andere Sachen berücksichtigen z.b. fehlende > oder so |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz