Avatar billede slapstick Nybegynder
04. november 2008 - 14:56 Der er 11 kommentarer og
1 løsning

problem med XmlDocument returneret fra webservice

jeg har en webservice der returnerer et XmlDocument
men når jeg så prøver at hive fat i det fra min asp.net applikation får jeg følgende fejl

Cannot implicitly convert type 'System.Xml.XmlNode' to 'System.Xml.XmlDocument'. An explicit conversion exists (are you missing a cast?)

jeg prøver at hente hive fat i den med det her:
XmlDocument xmlTree = myWebService.GetTreeView();

hvis jeg prøver at caste det sådan her:
XmlDocument xmlTree = (XmlDocument)uddiWebService.GetTreeView();

får jeg følgende fejl:
Unable to cast object of type 'System.Xml.XmlElement' to type 'System.Xml.XmlDocument'.

Hvad går der galt?
Avatar billede arne_v Ekspert
04. november 2008 - 15:00 #1
Du har et XmlElement ikke et XmlDocument.

Du kan caste til XmlElement og processe det som sådan.

Eller bedre send den XML som string og lad client kalde XmlDocument LoadXml.
Avatar billede slapstick Nybegynder
04. november 2008 - 15:04 #2
ja det fandt jeg også ud af her http://support.microsoft.com/kb/330600 hehe
jeg valgte at gøre det sådan her:

XmlDocument xmlTree = new XmlDocument();
xmlTree.ImportNode(myWebService.GetTreeView(), true);

men smid et svar så får du point for du kom jo med den rigtige løsning :o)
Avatar billede kalp Novice
04. november 2008 - 15:14 #3
Du kunne også have gjort:

XmlDocument xmlTree = new XmlDocument();
xmlTree.LoadXml(myWebService.GetTreeView().OuterXml);
Avatar billede slapstick Nybegynder
04. november 2008 - 15:15 #4
nå ja nu har jeg så et andet problem når jeg prøver at binde mit xmldocument til mit treeview..

HierarchicalDataBoundControl only accepts data sources that implement IHierarchicalDataSource or IHierarchicalEnumerable.

prøver at binde med den her
tvCategories.DataSource = xmlTree;
Avatar billede slapstick Nybegynder
04. november 2008 - 15:15 #5
kalp hehehe ok
Avatar billede slapstick Nybegynder
04. november 2008 - 15:31 #6
nå fik løst det..
Avatar billede kalp Novice
04. november 2008 - 15:32 #7
Du skal gøre sådan her.

XmlDocument xmlTree = new XmlDocument();
xmlTree.LoadXml(myWebService.GetTreeView().OuterXml);
XmlDataSource dataSource = new XmlDataSource();
dataSource.Data = xmlTree.OuterXml;
//eller xmlTree.InnerXml;
tvCategories.DataSource = dataSource;
tvCategories.DataBind();
Avatar billede slapstick Nybegynder
04. november 2008 - 15:45 #8
ah ja ok smukt nok
jeg var anyway nødt til at gemme xml dataen til en fil så gemte det til en fil først og bindede bagefter.. men det der er da smartere kan jeg se!
Avatar billede kalp Novice
04. november 2008 - 16:31 #9
i øvrigt er det bedst (i mine øjne) at lade det forblive som XmlElement, XmlNode eller XmlDocument..
det giver dig muligheden for, at åbne og lukke noder direkte i Explorer.
Hvis det er en string skal du først gemme det som xml, fjerne string delen før du har denne mulighed.
Avatar billede arne_v Ekspert
04. november 2008 - 16:44 #10
En string kan loades direkte ind i et XmlDocument.

Og at sende XmlXxxx i en web service er efter min bedste mening meningsløst.

Man brænder en masse CPU ressourcer af på at konvertere data til og fra et tekst
format men vælger alligevel nogle data typer som kun .NET kan læse.

Enten prioriterer man performance og bruger et binært format (meget nemt at skifte
med WCF) eller så prioriterer man interoperabilitet (med Java, PHP, Python etc.)
og sender en string som de pågældende sprog så kan processe som XML på deres
forskellige måder.
Avatar billede kalp Novice
04. november 2008 - 18:06 #11
* Og at sende XmlXxxx i en web service er efter min bedste mening meningsløst

Det kommer vel an på hvilket systemer der skal benytte webservicen.
Jeg synes det er pænt, at angive XmlDocument når nu det er dét som det er og ikke en string.

men umiddelbart kan jeg ikke lige se hvorfor det koster mere, at lave et XmlDocument fra en webservice end fra modtageren.
Avatar billede arne_v Ekspert
24. november 2008 - 00:17 #12
Der er en lille matrix:

                        .NET specifikke typer                generelle typer
XML formater        langsomt & ikke-interoperabelt      langsomt & interoperabelt
binære formater      hurtigt & ikke-interoperabelt      hurtigt & ikke-interoperabelt/kræver meget kode

XML formater + .NET specifikke typer evner at kombinere det langsomme med det
ikke-interoperable.

Jeg har svært ved at forestille mig en situation, hvor det skulle være optimalt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester