AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi MSXML: Nicht valide Nodes ignorieren

MSXML: Nicht valide Nodes ignorieren

Ein Thema von Mr_G · begonnen am 18. Jan 2009 · letzter Beitrag vom 11. Feb 2009
Antwort Antwort
Seite 3 von 3     123
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#21

Re: MSXML: Nicht valide Nodes ignorieren

  Alt 9. Feb 2009, 15:59
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:
Der Inhalt des Elements 'a' ist gemäß dem Inhaltsmodell des übergeordneten Elements 'XXXXX' nicht gültig.
Erwartet: XXXX1, XXXX2, XXXX3, XXXX4, XXXX5.

Das Element 'b' wird verwendet, aber es ist im DTD/Schema nicht deklariert .
Zwar in gewisser Weise keine gute Nachricht...aber naja...jetzt müsste ich mir nur irgendwas überlegen wie er nicht beim Überprüfen der Wohlgeformtheit der XML-Datei abbricht. Und so perfekt wirkt es auch noch nicht...hmhm

Falls wer einen Tipp hat, her damit!

MfG Alaitoc

PS: Schonmal Danke für die Mühen :>
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#22

Re: MSXML: Nicht valide Nodes ignorieren

  Alt 9. Feb 2009, 16:34
Zitat von Alaitoc:
Endlich eine Art Durchbruch...MultipleErrors funktioniert scheinbar nur bei der Schemaüberprüfung,...
Daher meine Frage nach dem Schema...

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?
Jan
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#23

Re: MSXML: Nicht valide Nodes ignorieren

  Alt 9. Feb 2009, 16:46
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
Miniaturansicht angehängter Grafiken
beispiel_213.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#24

Re: MSXML: Nicht valide Nodes ignorieren

  Alt 9. Feb 2009, 16:52
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!
Jan
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#25

Re: MSXML: Nicht valide Nodes ignorieren

  Alt 9. Feb 2009, 17:23
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
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#26

Re: MSXML: Nicht valide Nodes ignorieren

  Alt 11. Feb 2009, 11:29
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.721 Beiträge
 
Delphi 10.4 Sydney
 
#27

Re: MSXML: Nicht valide Nodes ignorieren

  Alt 11. Feb 2009, 11:34
Zitat von Alaitoc:
Hm naja eine Möglichkeit wäre nun ...
Das würde z.B. falsche Anfangs- und End-Tag nicht beachten
z.B.
Delphi-Quellcode:
<test><a></test>

<test><a></test></a>
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#28

Re: MSXML: Nicht valide Nodes ignorieren

  Alt 11. Feb 2009, 11:51
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf