si j'essaie de transformer avec javax.xml.transform.Transformer un
fichier XML, et que celui-ci a la déclaration d'une DTD, le
transformer semble bloquer et cherche à récupérer la DTD
correspondante - et s'il n'y arrive pas le fichier XML ne sera pas
transformé.
Y-a-t'il un moyen quelconque de l'empêcher de se comporter comme ça,
que le parseur XSLT traite immédiatement le XML en faisait fi de la DTD ?
Actuellement, le seul moyen que j'ai trouvé, c'est de parser d'un
autre côté le fichier XML, de supprimer la déclaration de la DTD, puis
de faire passer ce nouveau document XML traité au parseur.
Mais je trouve ça dommage, et étonnant que je ne puisse pas dire au
parseur XSLT de ne pas faire attention aux DTD...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
alexandre cartapanis
Bonjour,
si j'essaie de transformer avec javax.xml.transform.Transformer un fichier XML, et que celui-ci a la déclaration d'une DTD, le transformer semble bloquer et cherche à récupérer la DTD correspondante - et s'il n'y arrive pas le fichier XML ne sera pas transformé.
Y-a-t'il un moyen quelconque de l'empêcher de se comporter comme ça, que le parseur XSLT traite immédiatement le XML en faisait fi de la DTD ?
Actuellement, le seul moyen que j'ai trouvé, c'est de parser d'un autre côté le fichier XML, de supprimer la déclaration de la DTD, puis de faire passer ce nouveau document XML traité au parseur.
Mais je trouve ça dommage, et étonnant que je ne puisse pas dire au parseur XSLT de ne pas faire attention aux DTD...
En vous remerciant d'avance pour vos lumières.
Je sais que pour un parser, tu peux lui indiquer de ne pas valider un document (methode setValidating()). Pour les transformer, je ne sais pas, mais comme je suppose qu'il se sert d'un parser pour analyser le document avant de le transformer...
La seconde possibilité que je vois, c'est de mettre les PublicId et SystemID de ta source a "null", comme ca en theorie il ne peux plus verifier.
Enfin, et suivant l'implementation du transformer, peut etre que tu peux le specifier en utilisant setParameter() du transformer, mais il faut trouver le bon parametre :)
Mais bon, je te conseille fortement de te debrouiller pour que la DTD soit accessible quand meme.
Bonjour,
si j'essaie de transformer avec javax.xml.transform.Transformer un
fichier XML, et que celui-ci a la déclaration d'une DTD, le transformer
semble bloquer et cherche à récupérer la DTD correspondante - et s'il
n'y arrive pas le fichier XML ne sera pas transformé.
Y-a-t'il un moyen quelconque de l'empêcher de se comporter comme ça, que
le parseur XSLT traite immédiatement le XML en faisait fi de la DTD ?
Actuellement, le seul moyen que j'ai trouvé, c'est de parser d'un autre
côté le fichier XML, de supprimer la déclaration de la DTD, puis de
faire passer ce nouveau document XML traité au parseur.
Mais je trouve ça dommage, et étonnant que je ne puisse pas dire au
parseur XSLT de ne pas faire attention aux DTD...
En vous remerciant d'avance pour vos lumières.
Je sais que pour un parser, tu peux lui indiquer de ne pas valider un
document (methode setValidating()). Pour les transformer, je ne sais
pas, mais comme je suppose qu'il se sert d'un parser pour analyser le
document avant de le transformer...
La seconde possibilité que je vois, c'est de mettre les PublicId et
SystemID de ta source a "null", comme ca en theorie il ne peux plus
verifier.
Enfin, et suivant l'implementation du transformer, peut etre que tu peux
le specifier en utilisant setParameter() du transformer, mais il faut
trouver le bon parametre :)
Mais bon, je te conseille fortement de te debrouiller pour que la DTD
soit accessible quand meme.
si j'essaie de transformer avec javax.xml.transform.Transformer un fichier XML, et que celui-ci a la déclaration d'une DTD, le transformer semble bloquer et cherche à récupérer la DTD correspondante - et s'il n'y arrive pas le fichier XML ne sera pas transformé.
Y-a-t'il un moyen quelconque de l'empêcher de se comporter comme ça, que le parseur XSLT traite immédiatement le XML en faisait fi de la DTD ?
Actuellement, le seul moyen que j'ai trouvé, c'est de parser d'un autre côté le fichier XML, de supprimer la déclaration de la DTD, puis de faire passer ce nouveau document XML traité au parseur.
Mais je trouve ça dommage, et étonnant que je ne puisse pas dire au parseur XSLT de ne pas faire attention aux DTD...
En vous remerciant d'avance pour vos lumières.
Je sais que pour un parser, tu peux lui indiquer de ne pas valider un document (methode setValidating()). Pour les transformer, je ne sais pas, mais comme je suppose qu'il se sert d'un parser pour analyser le document avant de le transformer...
La seconde possibilité que je vois, c'est de mettre les PublicId et SystemID de ta source a "null", comme ca en theorie il ne peux plus verifier.
Enfin, et suivant l'implementation du transformer, peut etre que tu peux le specifier en utilisant setParameter() du transformer, mais il faut trouver le bon parametre :)
Mais bon, je te conseille fortement de te debrouiller pour que la DTD soit accessible quand meme.
Vincent Hiribarren
alexandre cartapanis wrote:
Je sais que pour un parser, tu peux lui indiquer de ne pas valider un document (methode setValidating()). Pour les transformer, je ne sais pas, mais comme je suppose qu'il se sert d'un parser pour analyser le document avant de le transformer...
Oui, mais je ne vois pas comment récupérer ce parseur pour lui faire changer son comportement.
La seconde possibilité que je vois, c'est de mettre les PublicId et SystemID de ta source a "null", comme ca en theorie il ne peux plus verifier.
J'ai vérifié, ils sont bien à "null", mais ça le fait quand même.
Enfin, et suivant l'implementation du transformer, peut etre que tu peux le specifier en utilisant setParameter() du transformer, mais il faut trouver le bon parametre :)
Malheureusement je ne vois pas quoi. J'ai même tenté un transformer.clearParameters() pour tout nettoyer.
Mais bon, je te conseille fortement de te debrouiller pour que la DTD soit accessible quand meme.
Malheureusement la DTD est : <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
Le xml source est bêtement un fichier "properties" qui est converti en XML à l'aide de Properties.storeToXml().
Bref, je sais que ce qui est généré est correct, je n'ai pas à proprement besoin parler de la DTD. Malheureusement le parseur tente de chercher la DTD sur le Web, chose que je ne veux pas.
Si je suis obligé de l'avoir, comment puis-je faire en sorte que la DTD soit cherchée localement dans un endroit que je spécifie, au lieu de la chercher sur le réseau ?
Encore merci d'avance.
alexandre cartapanis wrote:
Je sais que pour un parser, tu peux lui indiquer de ne pas valider un
document (methode setValidating()). Pour les transformer, je ne sais
pas, mais comme je suppose qu'il se sert d'un parser pour analyser le
document avant de le transformer...
Oui, mais je ne vois pas comment récupérer ce parseur pour lui faire
changer son comportement.
La seconde possibilité que je vois, c'est de mettre les PublicId et
SystemID de ta source a "null", comme ca en theorie il ne peux plus
verifier.
J'ai vérifié, ils sont bien à "null", mais ça le fait quand même.
Enfin, et suivant l'implementation du transformer, peut etre que tu peux
le specifier en utilisant setParameter() du transformer, mais il faut
trouver le bon parametre :)
Malheureusement je ne vois pas quoi. J'ai même tenté un
transformer.clearParameters() pour tout nettoyer.
Mais bon, je te conseille fortement de te debrouiller pour que la DTD
soit accessible quand meme.
Malheureusement la DTD est :
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
Le xml source est bêtement un fichier "properties" qui est converti en
XML à l'aide de Properties.storeToXml().
Bref, je sais que ce qui est généré est correct, je n'ai pas à
proprement besoin parler de la DTD. Malheureusement le parseur tente
de chercher la DTD sur le Web, chose que je ne veux pas.
Si je suis obligé de l'avoir, comment puis-je faire en sorte que la
DTD soit cherchée localement dans un endroit que je spécifie, au lieu
de la chercher sur le réseau ?
Je sais que pour un parser, tu peux lui indiquer de ne pas valider un document (methode setValidating()). Pour les transformer, je ne sais pas, mais comme je suppose qu'il se sert d'un parser pour analyser le document avant de le transformer...
Oui, mais je ne vois pas comment récupérer ce parseur pour lui faire changer son comportement.
La seconde possibilité que je vois, c'est de mettre les PublicId et SystemID de ta source a "null", comme ca en theorie il ne peux plus verifier.
J'ai vérifié, ils sont bien à "null", mais ça le fait quand même.
Enfin, et suivant l'implementation du transformer, peut etre que tu peux le specifier en utilisant setParameter() du transformer, mais il faut trouver le bon parametre :)
Malheureusement je ne vois pas quoi. J'ai même tenté un transformer.clearParameters() pour tout nettoyer.
Mais bon, je te conseille fortement de te debrouiller pour que la DTD soit accessible quand meme.
Malheureusement la DTD est : <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
Le xml source est bêtement un fichier "properties" qui est converti en XML à l'aide de Properties.storeToXml().
Bref, je sais que ce qui est généré est correct, je n'ai pas à proprement besoin parler de la DTD. Malheureusement le parseur tente de chercher la DTD sur le Web, chose que je ne veux pas.
Si je suis obligé de l'avoir, comment puis-je faire en sorte que la DTD soit cherchée localement dans un endroit que je spécifie, au lieu de la chercher sur le réseau ?
Encore merci d'avance.
PASTUREL JL
Regarder là : http://java.developpez.com/faq/java/?page=generalitesXML "alexandre cartapanis" a écrit dans le message de news:4358bda8$0$979$
Bonjour,
si j'essaie de transformer avec javax.xml.transform.Transformer un fichier XML, et que celui-ci a la déclaration d'une DTD, le transformer semble bloquer et cherche à récupérer la DTD correspondante - et s'il n'y arrive pas le fichier XML ne sera pas transformé.
Y-a-t'il un moyen quelconque de l'empêcher de se comporter comme ça, que le parseur XSLT traite immédiatement le XML en faisait fi de la DTD ?
Actuellement, le seul moyen que j'ai trouvé, c'est de parser d'un autre côté le fichier XML, de supprimer la déclaration de la DTD, puis de faire passer ce nouveau document XML traité au parseur.
Mais je trouve ça dommage, et étonnant que je ne puisse pas dire au parseur XSLT de ne pas faire attention aux DTD...
En vous remerciant d'avance pour vos lumières.
Je sais que pour un parser, tu peux lui indiquer de ne pas valider un document (methode setValidating()). Pour les transformer, je ne sais pas, mais comme je suppose qu'il se sert d'un parser pour analyser le document avant de le transformer...
La seconde possibilité que je vois, c'est de mettre les PublicId et SystemID de ta source a "null", comme ca en theorie il ne peux plus verifier.
Enfin, et suivant l'implementation du transformer, peut etre que tu peux le specifier en utilisant setParameter() du transformer, mais il faut trouver le bon parametre :)
Mais bon, je te conseille fortement de te debrouiller pour que la DTD soit accessible quand meme.
Regarder là :
http://java.developpez.com/faq/java/?page=generalitesXML
"alexandre cartapanis" <alexandre.cartapanis@macymed.fr> a écrit dans le
message de news:4358bda8$0$979$8fcfb975@news.wanadoo.fr...
Bonjour,
si j'essaie de transformer avec javax.xml.transform.Transformer un
fichier XML, et que celui-ci a la déclaration d'une DTD, le transformer
semble bloquer et cherche à récupérer la DTD correspondante - et s'il
n'y arrive pas le fichier XML ne sera pas transformé.
Y-a-t'il un moyen quelconque de l'empêcher de se comporter comme ça, que
le parseur XSLT traite immédiatement le XML en faisait fi de la DTD ?
Actuellement, le seul moyen que j'ai trouvé, c'est de parser d'un autre
côté le fichier XML, de supprimer la déclaration de la DTD, puis de
faire passer ce nouveau document XML traité au parseur.
Mais je trouve ça dommage, et étonnant que je ne puisse pas dire au
parseur XSLT de ne pas faire attention aux DTD...
En vous remerciant d'avance pour vos lumières.
Je sais que pour un parser, tu peux lui indiquer de ne pas valider un
document (methode setValidating()). Pour les transformer, je ne sais
pas, mais comme je suppose qu'il se sert d'un parser pour analyser le
document avant de le transformer...
La seconde possibilité que je vois, c'est de mettre les PublicId et
SystemID de ta source a "null", comme ca en theorie il ne peux plus
verifier.
Enfin, et suivant l'implementation du transformer, peut etre que tu peux
le specifier en utilisant setParameter() du transformer, mais il faut
trouver le bon parametre :)
Mais bon, je te conseille fortement de te debrouiller pour que la DTD
soit accessible quand meme.
Regarder là : http://java.developpez.com/faq/java/?page=generalitesXML "alexandre cartapanis" a écrit dans le message de news:4358bda8$0$979$
Bonjour,
si j'essaie de transformer avec javax.xml.transform.Transformer un fichier XML, et que celui-ci a la déclaration d'une DTD, le transformer semble bloquer et cherche à récupérer la DTD correspondante - et s'il n'y arrive pas le fichier XML ne sera pas transformé.
Y-a-t'il un moyen quelconque de l'empêcher de se comporter comme ça, que le parseur XSLT traite immédiatement le XML en faisait fi de la DTD ?
Actuellement, le seul moyen que j'ai trouvé, c'est de parser d'un autre côté le fichier XML, de supprimer la déclaration de la DTD, puis de faire passer ce nouveau document XML traité au parseur.
Mais je trouve ça dommage, et étonnant que je ne puisse pas dire au parseur XSLT de ne pas faire attention aux DTD...
En vous remerciant d'avance pour vos lumières.
Je sais que pour un parser, tu peux lui indiquer de ne pas valider un document (methode setValidating()). Pour les transformer, je ne sais pas, mais comme je suppose qu'il se sert d'un parser pour analyser le document avant de le transformer...
La seconde possibilité que je vois, c'est de mettre les PublicId et SystemID de ta source a "null", comme ca en theorie il ne peux plus verifier.
Enfin, et suivant l'implementation du transformer, peut etre que tu peux le specifier en utilisant setParameter() du transformer, mais il faut trouver le bon parametre :)
Mais bon, je te conseille fortement de te debrouiller pour que la DTD soit accessible quand meme.
Vincent Hiribarren
PASTUREL JL wrote:
Regarder là : http://java.developpez.com/faq/java/?page=generalitesXML
J'avoue ne pas voir où vous voulez en venir.
La seule partie intéressante serait celle sur la création du "tag" sur le DOCTYPE et la DTD, mais c'est justement car ce "tag" existe déjà et que je ne veux pas qu'il soit traité que j'ai un problème.
Ou alors il ne me reste plus que la solution consistant à reparser par moi même le fichier XML pour enlever le tag DOCTYPE, ce qui serait assez dommage.
PASTUREL JL wrote:
Regarder là :
http://java.developpez.com/faq/java/?page=generalitesXML
J'avoue ne pas voir où vous voulez en venir.
La seule partie intéressante serait celle sur la création du "tag" sur
le DOCTYPE et la DTD, mais c'est justement car ce "tag" existe déjà et
que je ne veux pas qu'il soit traité que j'ai un problème.
Ou alors il ne me reste plus que la solution consistant à reparser par
moi même le fichier XML pour enlever le tag DOCTYPE, ce qui serait
assez dommage.
Regarder là : http://java.developpez.com/faq/java/?page=generalitesXML
J'avoue ne pas voir où vous voulez en venir.
La seule partie intéressante serait celle sur la création du "tag" sur le DOCTYPE et la DTD, mais c'est justement car ce "tag" existe déjà et que je ne veux pas qu'il soit traité que j'ai un problème.
Ou alors il ne me reste plus que la solution consistant à reparser par moi même le fichier XML pour enlever le tag DOCTYPE, ce qui serait assez dommage.
Anthony Goubard
Oui c'est exact même avec le validating à false le parser cherche encore à charger le DTD.
La solution: http://www.javalobby.org/java/forums/t19576.html
Anthony Vincent Hiribarren wrote:
Bonjour,
si j'essaie de transformer avec javax.xml.transform.Transformer un fichier XML, et que celui-ci a la déclaration d'une DTD, le transformer semble bloquer et cherche à récupérer la DTD correspondante - et s'il n'y arrive pas le fichier XML ne sera pas transformé.
Y-a-t'il un moyen quelconque de l'empêcher de se comporter comme ça, que le parseur XSLT traite immédiatement le XML en faisait fi de la DTD ?
Actuellement, le seul moyen que j'ai trouvé, c'est de parser d'un autre côté le fichier XML, de supprimer la déclaration de la DTD, puis de faire passer ce nouveau document XML traité au parseur.
Mais je trouve ça dommage, et étonnant que je ne puisse pas dire au parseur XSLT de ne pas faire attention aux DTD...
En vous remerciant d'avance pour vos lumières.
Oui c'est exact même avec le validating à false le parser cherche encore
à charger le DTD.
La solution:
http://www.javalobby.org/java/forums/t19576.html
Anthony
Vincent Hiribarren wrote:
Bonjour,
si j'essaie de transformer avec javax.xml.transform.Transformer un
fichier XML, et que celui-ci a la déclaration d'une DTD, le transformer
semble bloquer et cherche à récupérer la DTD correspondante - et s'il
n'y arrive pas le fichier XML ne sera pas transformé.
Y-a-t'il un moyen quelconque de l'empêcher de se comporter comme ça, que
le parseur XSLT traite immédiatement le XML en faisait fi de la DTD ?
Actuellement, le seul moyen que j'ai trouvé, c'est de parser d'un autre
côté le fichier XML, de supprimer la déclaration de la DTD, puis de
faire passer ce nouveau document XML traité au parseur.
Mais je trouve ça dommage, et étonnant que je ne puisse pas dire au
parseur XSLT de ne pas faire attention aux DTD...
Oui c'est exact même avec le validating à false le parser cherche encore à charger le DTD.
La solution: http://www.javalobby.org/java/forums/t19576.html
Anthony Vincent Hiribarren wrote:
Bonjour,
si j'essaie de transformer avec javax.xml.transform.Transformer un fichier XML, et que celui-ci a la déclaration d'une DTD, le transformer semble bloquer et cherche à récupérer la DTD correspondante - et s'il n'y arrive pas le fichier XML ne sera pas transformé.
Y-a-t'il un moyen quelconque de l'empêcher de se comporter comme ça, que le parseur XSLT traite immédiatement le XML en faisait fi de la DTD ?
Actuellement, le seul moyen que j'ai trouvé, c'est de parser d'un autre côté le fichier XML, de supprimer la déclaration de la DTD, puis de faire passer ce nouveau document XML traité au parseur.
Mais je trouve ça dommage, et étonnant que je ne puisse pas dire au parseur XSLT de ne pas faire attention aux DTD...
En vous remerciant d'avance pour vos lumières.
Vincent Hiribarren
Anthony Goubard wrote:
Oui c'est exact même avec le validating à false le parser cherche encore à charger le DTD.
La solution: http://www.javalobby.org/java/forums/t19576.html
Le problème c'est que ça s'applique à SAX. Pour faire du XSLT, donc javax.xml.transform.Transformer je ne vois pas.
Tout ce que j'ai c'est un "setURIResolver", donc j'ai fait ça :
Mais ça ne marche pas. D'ailleurs l'aide indique que ça sert à résoudre les xsl:import ou xsl:include, pas pour la DTD. Et je ne vois pas comment avoir accès au parseur utilisé pour faire le XSLT.
Anthony Goubard wrote:
Oui c'est exact même avec le validating à false le parser cherche encore
à charger le DTD.
La solution:
http://www.javalobby.org/java/forums/t19576.html
Le problème c'est que ça s'applique à SAX.
Pour faire du XSLT, donc javax.xml.transform.Transformer je ne vois pas.
Tout ce que j'ai c'est un "setURIResolver", donc j'ai fait ça :
Mais ça ne marche pas. D'ailleurs l'aide indique que ça sert à
résoudre les xsl:import ou xsl:include, pas pour la DTD. Et je ne vois
pas comment avoir accès au parseur utilisé pour faire le XSLT.
Mais ça ne marche pas. D'ailleurs l'aide indique que ça sert à résoudre les xsl:import ou xsl:include, pas pour la DTD. Et je ne vois pas comment avoir accès au parseur utilisé pour faire le XSLT.