Come si analizza un documento XML dopo la prima convalida su un DTD in VB6
Domanda
Sto tentando di scrivere un parser XML in VB6.
Gli standard su cui si basa l'XML vengono forniti con un DTD per verificare l'XML prima di iniziare l'analisi. Ho anche scritto un file XML di esempio in modo da avere qualcosa con cui testare.
Sono in grado di caricare l'XML tramite il codice vb6
Dim objXMLDoc As MSXML.DOMDocument
Set objXMLDoc = New MSXML.DOMDocument
If Not objXMLDoc.Load("sample.xml") Then
----Goto ErrorHandler
End If
XML funzionante
<?xml version = "1.0"?>
<Root>
...
</Root>
Sto cercando di convalidare con il mio DTD
<?xml version = "1.0"?>
<!DOCTYPE sample SYSTEM "sample.dtd">
<Root>
...
</Root>
La ricerca che ho condotto mi ha portato a credere che il Load avrebbe convalidato l'XML se l'XML avesse puntato al DTD tramite il tipo di documento.
Ho fatto molte ricerche e non riesco a capire dove sbaglio. Potrebbe essere semplice in quanto il DTD fornito non è sintatticamente corretto, che sto esaminando ora. Le risorse che ho trovato sono principalmente su MSDN e qui http://www.jalix.org/ressources/internet/dom/~vrac/articles/XML%20DOM.html .
Sia xml che dtd si trovano nella stessa directory e ho analizzato l'XML senza il tag doctype.
L'errore che ottengo è:
Errore n .: -2146697211: il sistema non è in grado di individuare la risorsa specificata.
errore durante l'elaborazione della risorsa "sample.dtd"
Qualsiasi ulteriore risorsa o suggerimento sarebbe molto apprezzato.
Soluzione
Non riesco a riprodurre il tuo errore. Funziona bene con entrambi i file nella stessa cartella per me.
Non è nemmeno un problema che il DTD non sia ben formato; che genera un altro errore. Ottengo lo stesso errore di te se non riesco a trovare il DTD, mentre ottengo l'errore -1072896757
(" Carattere non valido trovato in DTD. & Quot;) se trova il mio (totalmente falso) DTD.
Hai provato a utilizzare una versione Microsoft XML diversa o sei legato alla vecchia versione 2.0 ? Prova v6.0 se possibile.
Altri suggerimenti
un suggerimento ovvio, ma hai provato a qualificare completamente il nome del file dtd (ovvero c: \ blahblah ... \ sample.dtd?