Contenu d'un fichier byte[] en string via WebService...

Bowen123 Messages postés 32 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 21 septembre 2011 - 10 mars 2005 à 11:27
cs_Crazyht Messages postés 1522 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 21 août 2010 - 16 mars 2005 à 08:30
Bonjour tous,

Je tente de passer le contenu d'un fichier
( string monContenuFichierString = Convert.ToBase64String(byte[ ] monContenuFichier); )
dans une string via webService. ce contenu est insrer dans une string "XML" que j'ai construit, genre :

maStringXML = "<Fichier nom="" + nomFichier + """ + " contenu= "" + monContenuFichierString + """ + "</Fichier>"
)

Mon problème est que je n'ai pas la fin de ma string, a savoir la fermeture de balise, car je supose ke le contenu est trop "gros";

J'ai essayé de passer par un StringBuilder meme resultat:



public
string getXml(
bool contenu){


StringBuilder xml=
new StringBuilder();
xml.Insert(xml.Length,
"<Fichier nom="" +
this.ficNom +
"" path="" +
this.ficSpec);



if (contenu) {
xml.Insert (xml.Length,
"" >");
xml.Insert(xml.Length,
"<Contenu="byte">" + Convert.ToBase64String (
this.FicContenu,0,
this.FicContenu.Length));//FicContenu est un byte[ ]
xml.Insert(xml.Length,
"</Contenu>");
}


xml.Insert(xml.Length,
"" >");
xml.Insert(xml.Length,
"</Fichier>");



return xml.ToString();

Je ne peu pas utilisé les Objet XML (XMLNode, XMLElement, etc.. ), obligé de passé par une string (directive projet).

des idées?

9 réponses

cs_Crazyht Messages postés 1522 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 21 août 2010 8
10 mars 2005 à 12:16
public
string getXml(
bool contenu)
{
StringBuilder xml=
new StringBuilder();
xml.Append(
"<Fichier nom="");
xml.Append(this.ficNom);
xml.Append(
"" path="");
xml.Append(this.ficSpec);
xml.Append("" >");

if (contenu)
{

xml.Append(
"<Contenu="byte">");
xml.Append(Convert.ToBase64String (
this.FicContenu,0,
this.FicContenu.Length));
xml.Append(
"</Contenu>");

}
xml.Append(
"</Fichier>");

return xml.ToString();

}

Essaye comme ca, Il doit y avoir une erreur de formatage du XML dans ton code de base ...

A++

Crazyht
MVP Visual C#.NET

[Admin Codes-Sources]
[Membre Developer-Association]
0
Bowen123 Messages postés 32 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 21 septembre 2011
10 mars 2005 à 17:43
Merci!

C'est vrai que c'est un peu plus propre comme ça.

cependant, je viens de constater que l'erreur venai du chargement de cette string :

XmlDocument dataXML =
new XmlDocument();


dataXML.LoadXml(chaineXML);

Je pense que certains caractere du contenu (du tableau de byte reconverti en string) ne passe pas dans le load.

Je suis vraiment pas doué pour le xml et les classes xml en C#.

Un autre coup de main please, merci
0
cs_Crazyht Messages postés 1522 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 21 août 2010 8
10 mars 2005 à 17:59
Hummm...

Suis pas certain de ton hypothese, En effet la Base64 est justement faites pour que toutes les valeurs d'un byte soit transformer en qq chose de valide en XML (ou autre)

Par contre essaie dans :
xml.Append("<Contenu="byte">");

Essaie de retirer le ="byte", je suis pas sur que ca soit vraiment valide en XML sous cette forme <contenu="byte">blabla</contenu> je parirer plus pour un flux ressemblant à :

public
string getXml(
bool contenu)
{
StringBuilder xml=
new StringBuilder();
xml.Append(
"<Fichier nom="");
xml.Append(this.ficNom);
xml.Append(
"" path="");
xml.Append(this.ficSpec);
xml.Append("" >");

if (contenu)
{

xml.Append("<ContenuType>byte</ContenuType>");

xml.Append("<Contenu>");

xml.Append(Convert.ToBase64String (this.FicContenu,0,
this.FicContenu.Length));
xml.Append(
"</Contenu>");

}
xml.Append(
"</Fichier>");

return xml.ToString();

}

A++

Crazyht
MVP Visual C#.NET

[Admin Codes-Sources]
[Membre Developer-Association]
0
Bowen123 Messages postés 32 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 21 septembre 2011
11 mars 2005 à 10:39
le loadXml du dataDocument souleve tjrs une XMLException.
(" Jeton inattendu.Le jeton attendu est 'NAME' Ligne 1 position 102.")

peut on chargé la string XML formé ci dessus meme si elle ne contien pas la ligne d'encoding? ca vien peut etre de la?..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Crazyht Messages postés 1522 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 21 août 2010 8
11 mars 2005 à 10:42
Ha ha bonne question, je viens juste de penser à la meme chose en lisant le debut de ta reponse :)

je serait tenter de dire : "Essaie :)"

A++

Crazyht
MVP Visual C#.NET

[Admin Codes-Sources]
[Membre Developer-Association]
0
Bowen123 Messages postés 32 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 21 septembre 2011
11 mars 2005 à 18:42
bon pour ceux qui aurait le meme probleme, j'ai résolu le mien en enlevant l'attribut de mon noeud enfant (ici le noeud "CONTENU").

apparement soit :
- il ne peu y avoir d'attribut à un noeud enfant
- il ne peu y avoir et un attribut ET une valeur dans le neoud en meme temps....

Merci Crazyht pour ton soutient ;)
0
cs_Crazyht Messages postés 1522 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 21 août 2010 8
11 mars 2005 à 18:50
Mais dis mois c t pas ma dexieme reponse ca ?

A++

Crazyht
MVP Visual C#.NET

[Admin Codes-Sources]
[Membre Developer-Association]
0
Bowen123 Messages postés 32 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 21 septembre 2011
15 mars 2005 à 16:26
Sisi c bien pour ca que je te remercie d'ailleur ;)

Cependant, le XML Myster demeure... pkoi ne peut-on pas avoir d'attribut ET une valeur pour un noeud enfant?... mais ça.. c'est une autre h... euh un autre sujet
0
cs_Crazyht Messages postés 1522 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 21 août 2010 8
16 mars 2005 à 08:30
En fait dans ce cas cela devrait s'ecrire :

<contenu type='byte'>blabla</contenu>

et pas
<contenu='byte'>blabla</contenu>

l'attribut du noeud etant type :)

A++

Crazyht
MVP Visual C#.NET

[Admin Codes-Sources]
[Membre Developer-Association]
0
Rejoignez-nous