Autor Téma: XSD validacia so zoznamom err  (Přečteno 490 krát)

Offline František

  • Guru
  • *****
  • Příspěvků: 707
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
XSD validacia so zoznamom err
« kdy: 09-08-2021, 02:11:34 »
potrebujem z validovat XML cez XSD, len mi to na prvej chybe konci
ale potrebujem zoznam vsetkych nezrovnalosti,
chyby mozu nastat len v nedodrzani formatov vystunych parametrov, nie v strukture

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3292
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:XSD validacia so zoznamom err
« Odpověď #1 kdy: 09-08-2021, 09:18:04 »
Nevim, jestli rozumim dotazu a jestli chces validaci delat v ramci vlastni aplikace a ten seznam nedostatku potrebujes do ni, nebo te jen pro potreby vyvoje zajima, co je spatne. Pouzival jsem nejaky on-line validator - mam dojem, ze https://www.xmlvalidation.com/, ale je dost mozne, ze to byla Altova, kterou jsme meli kdysi v drevnich dobach koupenou - HOSIP

Offline František

  • Guru
  • *****
  • Příspěvků: 707
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:XSD validacia so zoznamom err
« Odpověď #2 kdy: 09-08-2021, 09:44:42 »
potrebujem to do aplikacie
validovat cely dokument a zobrazit zoznam chybnych hodnot - ako som spominal struktura je v poriadku - ale obsah sa moze vyskytnut neuplny - nap. xsd ma typ so striktnou dlzkov jednej hodnoty - ale mozem tam zapisat kratsiu.. a to potrebujem pri validacii zachytit a dat do zoznamu chyb

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3292
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:XSD validacia so zoznamom err
« Odpověď #3 kdy: 09-08-2021, 10:42:58 »
potrebujem to do aplikacie
validovat cely dokument a zobrazit zoznam chybnych hodnot - ako som spominal struktura je v poriadku - ale obsah sa moze vyskytnut neuplny - nap. xsd ma typ so striktnou dlzkov jednej hodnoty - ale mozem tam zapisat kratsiu.. a to potrebujem pri validacii zachytit a dat do zoznamu chyb
Tak s tim jsem nikdy nic nedelal a prima podpora v Delphi asi nebude...

Nicmene MSXML parser poskytuje rozhrani IXMLDOMDocument3 s metodou validateNode viz https://documentation.help/MSXML-5.0-SDK/xml_mth_sz_7bz9.htm. Je tam  i nejaky example, kde elementy postupne prochazi, takze nejaky seznam chyb se da asi vyloudit.

Offline František

  • Guru
  • *****
  • Příspěvků: 707
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:XSD validacia so zoznamom err
« Odpověď #4 kdy: 09-08-2021, 12:53:02 »
vdaka pf , dobre nasmerovanie ako vzdy

napladla ma este otazka

validovat to uz pri vytvarani XML alebo az ked je komplet vytvoreny

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3292
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:XSD validacia so zoznamom err
« Odpověď #5 kdy: 09-08-2021, 13:32:11 »
validovat to uz pri vytvarani XML alebo az ked je komplet vytvoreny
Jestli pouzijes tu metodu validateNode, tak to muzes (si myslim - nevim) delat hned, jakmile sestavis prislusny fragment DOM tj. napr. po pridani/zeditovani uzlu. A nakonec asi jako celek po Save nebo tak neco.

Offline Palino

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 7, XE, Seattle
Re:XSD validacia so zoznamom err
« Odpověď #6 kdy: 10-08-2021, 09:32:48 »
Ja pouzivam nieco taketo. Vracia to string chyb. Ak je prazdny je validacia OK.

function CheckSchema(const formFile: string; const schemaFile: string): string;
var
  xml, xsd: IXMLDOMDocument2;
  cache: IXMLDOMSchemaCollection;
  err: Boolean;
  schemas: IXMLDOMSchemaCollection;
begin

  xml := CoDOMDocument60.Create;
  xml.load(formFile);
  schemas := xml.namespaces;

  xsd := CoDOMDocument60.Create;
  xsd.Async := False;
  xsd.load( schemaFile );

  cache := CoXMLSchemaCache60.Create;
  cache.add(schemas.namespaceURI[0], xsd);

  xml := CoDOMDocument60.Create;
  xml.async := False;
  xml.schemas := cache;
  xml.validateOnParse := True;
  xml.resolveExternals := True;

  err := xml.load(formFile);
  if not err then
    result := XMLDOMParseErrorToStringUnit.TXMLDOMParseErrorToString.ToString ( xml.parseError )
  else
    result := '';
end;

Offline František

  • Guru
  • *****
  • Příspěvků: 707
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:XSD validacia so zoznamom err
« Odpověď #7 kdy: 10-08-2021, 10:07:23 »
palino parada
ale co tymto, nemam to, nasiel som nieco na Githube ale mohol by si mi to upresnit?

XMLDOMParseErrorToStringUnit.TXMLDOMParseErrorToString.ToString

ak sa da, uved aj unity k tomu
« Poslední změna: 10-08-2021, 10:18:57 od František »

Offline František

  • Guru
  • *****
  • Příspěvků: 707
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:XSD validacia so zoznamom err
« Odpověď #8 kdy: 10-08-2021, 11:12:42 »
https://github.com/VSoftTechnologies/DUnit-XML/tree/master/Xsd/ValidateXmlWithXsd
doplneneim tychto rutin som to rozbehal

ale vystupom je len posledna chyba
tak kde je chyba?

Offline František

  • Guru
  • *****
  • Příspěvků: 707
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:XSD validacia so zoznamom err
« Odpověď #9 kdy: 10-08-2021, 11:59:51 »
nasiel som to
Kód: Delphi [Vybrat]
  1. XmlDocument.setProperty('MultipleErrorMessages',true);

Offline František

  • Guru
  • *****
  • Příspěvků: 707
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:XSD validacia so zoznamom err
« Odpověď #10 kdy: 10-08-2021, 14:38:57 »
aby som to este upresnil co som nakoniec pouzil

https://wiert.me/2010/01/19/validate-xml-with-xsd-in-net-and-native-msxml-big-difference-in-string-maxlength-validation-and-newlines-samples-in-c-and-delphi/

s doplneneim
Kód: Delphi [Vybrat]
  1. XmlDocument.setProperty('MultipleErrorMessages',true);