Kontrola XML podle DTD

Školení, která pořádám

Pokud chceme zkontrolovat např. uživatelem zadaná data obsahující HTML kód, je asi nejjednodušší využít rozšíření Tidy. Jak ale postupovat v případě, pokud chceme zkontrolovat obecný XML dokument podle jeho DTD (může se jednat např. o RSS nebo XHTML)? Elegantní řešení nabízí nové rozšíření PHP 5 DOM.

<?php
// kontrola HTML
$tidy = tidy_parse_file($filename, array("accessibility-check" => 1), "raw");
echo tidy_get_error_buffer($tidy);

// kontrola XML proti obecnému DTD
$dom = DOMDocument::load($filename); // ověří správnost XML
$dom->validate(); // ověří XML proti použitému DTD
?>

V PHP 4 lze ke stejnému účelu použít funkci domxml_open_file s parametrem DOMXML_LOAD_VALIDATING. by to tak jednoduché nebylo, ve starém rozšíření DOM XML obdobná metoda dostupná pokud vím není a bylo by potřeba hledat jinde.

Jakub Vrána, Řešení problému, 7.9.2005, diskuse: 4 (nové: 0)

Diskuse

Michal Molhanec:

Taky umí validovat oproti Relax NG (ne kompaktní) a XML schématu. Viz http://badame.vse.cz/izi248/slides/foil33.html

Michal Molhanec:

Jinak v PHP 4 by mělo stačit (nezkoušel jsem) funkco domxml_open_file() parametr DOMXML_LOAD_VALIDATING, viz http://www.php.net/manual/en/function.domxml-open-file.php

ikona Jakub Vrána OpenID:

Díky za upozornění. Vyzkoušel jsem to a opravdu to tak je. V textu jsem to opravil.

Petr:

Kontrola XML podle norem je hezká věc. Ale zrovna dělám jednu RSS čtečku a testuji to na řadě serverů a těch, které posílají různým způsobem vadné RSS, není zrovna málo. Takže pokud chci mít možnost načítat maximum zdrojů, tak stejně musím na normy 'kašlat'.

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.