Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C#]Ignorare DTD in lettura XML

    Ciao,
    sono alle prese con un programma che deve leggere un documento xml tramite la classe XmlTextReader, e lo voglio impostare perchè ignori la dichiarazione del doctype.
    Così ho scritto queste righe di codice:
    codice:
    reader.XmlResolver = null;
    reader.ProhibitDtd = false;
    reader.DtdProcessing = DtdProcessing.Ignore;
    Però quando il metodo reader.Read() legge il doctype, invece di ignorarlo e andare avanti scatena una XmlException con messaggio "Dichiarazione DTD imprevista."

    Qualcuno ha idea del perchè? Ho sbagliato qualcosa?

    Grazie
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  2. #2
    Facendo un'altra prova
    codice:
    XmlDocument doc = new XmlDocument();
    doc.Load(fileName);
    quando chiamo il metodo Load() ottengo sempre XmlException con messaggio "Dichiarazione DTD imprevista". Com'è possibile?
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244

    Re: [C#]Ignorare DTD in lettura XML

    Originariamente inviato da furbostandby
    Ciao,
    sono alle prese con un programma che deve leggere un documento xml tramite la classe XmlTextReader, e lo voglio impostare perchè ignori la dichiarazione del doctype.
    Così ho scritto queste righe di codice:
    codice:
    reader.XmlResolver = null;
    reader.ProhibitDtd = false;
    reader.DtdProcessing = DtdProcessing.Ignore;
    Qualcosa non torna.

    Tra i metodi della classe XmlTextReader :
    http://msdn.microsoft.com/it-it/libr...r_methods.aspx
    non ne esiste nessuno di quelli che usi tu.

    Mostra anche il resto del codice che usi prima per creare gli oggetti, ecc....


  4. #4

    Re: Re: [C#]Ignorare DTD in lettura XML

    Originariamente inviato da gibra
    Qualcosa non torna.

    Tra i metodi della classe XmlTextReader :
    http://msdn.microsoft.com/it-it/libr...r_methods.aspx
    non ne esiste nessuno di quelli che usi tu.
    Torna tutto, invece: ovvio che non li trovi nell'elenco dei metodi, perchè non sono metodi ma proprietà, infatti qui ci sono: http://msdn.microsoft.com/it-it/libr...roperties.aspx

    Il problema di prima l'ho risolto, si trattava soltanto di un errore di sintassi dell'xml, ma ora succede una cosa molto strana: nel codice
    codice:
    FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
    XmlDocument doc = new XmlDocument();
    doc.Load(stream);
    esce una System.IO.DirectoryNotFoundException con messaggio
    codice:
    Impossibile trovare una parte del percorso '<cartellaprogramma>\-\W3C\DTD SVG 1.1\EN'.
    (al posto di <cartellaprogramma> c'è il percorso).
    Il DTD viene interpretato come un percorso?!?

    Questo è l'XML (è un file svg)
    codice:
    <?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg">
    	<text x="10" y="100" style="fill:red;font-family:times;font-size:18">Primo esempio di SVG</text>
    </svg>
    Spero che qualcuno mi sappia aiutare

    Grazie
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244

    Re: Re: Re: [C#]Ignorare DTD in lettura XML

    Originariamente inviato da furbostandby
    Torna tutto, invece: ovvio che non li trovi nell'elenco dei metodi, perchè non sono metodi ma proprietà, infatti qui ci sono: http://msdn.microsoft.com/it-it/libr...roperties.aspx
    Chissà perchè cavolo ho guardato tra i metodi, poi...
    Ho perso un'altra occasione per star zitto.

    Scusa.

  6. #6
    Non preoccuparti, sono cose che capitano.

    Comunque nessuna idea?
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  7. #7
    up
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Fai un progettino, con il file svg allegato, zippalo e mettilo online.


  9. #9
    Ok, ho fatto un progetto di esempio (VS2010).

    Per vedere le eccezioni usa l'intellitrace di visual studio, perchè siccome genera un loop il blocco try/catch non serve a niente. Avvia il debug poi clicca "interrompi tutto" e ti viene fuori.

    Password archivio zip: xmlsvg

    http://furbostandby.altervista.org/XmlDtdRemove.zip

    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  10. #10
    Tutto ok,
    ho risolto settando l'XmlResolver a null.

    Riepilogando:
    codice:
    FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
    XmlDocument doc = new XmlDocument();
    doc.XmlResolver = null;
    doc.Load(stream);
    if (doc.DocumentType != null)
    {
          doc.RemoveChild(doc.DocumentType);
    }
    gibra, grazie comunque per la disponibilità

    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.