Har problem med en xmltextwriter som inte uppdateras...
Jag försöker köra denna snurra och lägger till xmldata via funktioner för att göra det lättare att hålla reda på. Det som händer är dock lite mystiskt och jag kan bara inte se det, kan ni?
Felet är att när den 2:a funktionen kallas så fylls ingen information på i writer-objektet. Endast informationen från den första funktionen sparas.
1 2 | < asp:Button ID = "Button1" runat = "server" Text = "Generera XML" OnClick = "Button1_Click" /></ div > < asp:Literal ID = "literal1" runat = "server" /> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | using System.IO; using System.Xml; using System.Text; protected void Button1_Click( object sender, EventArgs e) { // skapar huvudet string randomguid = System.Guid.NewGuid().ToString(); string filename = "c:\\test_" + DateTime.Now.Day + ".xml" ; if (File.Exists(filename)) File.Delete(filename); // Create a new XmlTextWriter instance XmlTextWriter writer = new XmlTextWriter(filename, Encoding.UTF8); writer.Indentation = 3; writer.Formatting = Formatting.Indented; // start writing! writer.WriteStartDocument(); writer.WriteStartElement( "fi2energystatement" ); writer.WriteElementString( "fi2estatement_guid" , randomguid); // kallar på funktionerna för att fylla vidare i writer objektet fi2estatement_owner(writer, randomguid); fi2estatement_coowner(writer, randomguid); writer.WriteEndElement(); // end writing writer.WriteEndDocument(); writer.Flush(); writer.Close(); // display result XmlDocument doc = new XmlDocument(); doc.PreserveWhitespace = true ; doc.Load(filename); literal1.Text = Server.HtmlEncode(doc.InnerXml.ToString()).Replace(Environment.NewLine, "<br />" ); } private XmlTextWriter fi2estatement_owner(XmlTextWriter writer, string randomguid) { writer.WriteStartElement( "fi2estatement_owner" ); writer.WriteStartElement( "fi2part_ids" ); writer.WriteStartElement( "fi2_id" ); writer.WriteAttributeString( "usage" , "GUID" ); writer.WriteAttributeString( "owner" , "fi2" ); writer.WriteString(randomguid); writer.WriteEndElement(); // -- class writer.WriteStartElement( "fi2part_class" ); writer.WriteElementString( "fi2class_code" , "02" ); writer.WriteStartElement( "fi2part_scheme" ); writer.WriteElementString( "fi2class_id" , "CA000_005_001" ); writer.WriteElementString( "fi2class_name" , "Klassificering fi2partner" ); writer.WriteEndElement(); writer.WriteEndElement(); // -- writer.WriteElementString( "fi2part_name" , "Ägarnamn" ); writer.WriteElementString( "fi2part_orgidcode" , "556565-1234" ); writer.WriteElementString( "fi2part_tel" , "08-695 60 00" ); writer.WriteElementString( "fi2part_mobtel" , "0730-123 456" ); writer.WriteElementString( "fi2part_email" , "123@456.se" ); // -- adress writer.WriteStartElement( "fi2part_address" ); writer.WriteStartElement( "fi2addr_class" ); writer.WriteElementString( "fi2class_code" , "05" ); writer.WriteStartElement( "fi2class_scheme" ); writer.WriteElementString( "fi2scheme_id" , "CA000_007_001" ); writer.WriteElementString( "fi2scheme_name" , "Klassificeringsadresser" ); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteElementString( "fi2addr_addrline" , "Adress" ); writer.WriteElementString( "fi2addr_zipcode" , "12345" ); writer.WriteElementString( "fi2addr_city" , "Postort" ); writer.WriteEndElement(); writer.WriteEndElement(); writer.Flush(); return writer; } private XmlTextWriter fi2estatement_coowner(XmlTextWriter writer, string randomguid) { writer.WriteStartElement( "fi2estatement_coowner" ); writer.WriteStartElement( "fi2part_ids" ); writer.WriteStartElement( "fi2_id" ); writer.WriteAttributeString( "usage" , "GUID" ); writer.WriteAttributeString( "owner" , "fi2" ); writer.WriteString(randomguid); writer.WriteEndElement(); writer.WriteEndElement(); // -- class writer.WriteStartElement( "fi2part_class" ); writer.WriteElementString( "fi2class_code" , "02" ); writer.WriteStartElement( "fi2part_scheme" ); writer.WriteElementString( "fi2class_id" , "CA000_005_001" ); writer.WriteElementString( "fi2class_name" , "Klassificering fi2partner" ); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteElementString( "fi2part_name" , "Övrig ägare namn" ); writer.WriteElementString( "fi2part_orgidcode" , "651212-1234" ); writer.WriteEndElement(); writer.Flush(); return writer; } |
Svara
Sv: Har problem med en xmltextwriter som inte uppdateras...
kanske du kan sätta writerns som reference i anropen , alternativt ta emot den du skickar tillbaka från dem nu :)
prova detta:
private void fi2estatement_owner(ref XmlTextWriter writer, string randomguid)
private void fi2estatement_coowner(ref XmlTextWriter writer, string randomguid)
Svara
Sv:Har problem med en xmltextwriter som inte uppdateras...
Var inne på att köra ref .. Fick också ändra så anropet blev ..
fi2estatement_owner(ref writer, randomguid);
fi2estatement_coowner(ref writer, randomguid);
Men det hjälper inte. Har säkert missat nåt larvigt ..
Svara
Sv: Har problem med en xmltextwriter som inte uppdateras...
Har ingen aning om vad det beror på, lite felsökningstips dock:
Vad händer om du bara anropar den andra funktionen, fungerar det då?
Om du anropar den första 2 ggr, blir det dubbelt med uppgifter då?
Om du klistrar in koden direkt i Click-metoden, fungerar det då?
/Johan
Svara
Sv: Har problem med en xmltextwriter som inte uppdateras...
hmm, klistrade in orginalkoden och körde den i princip as is, den funkade som sig bör. (Visserligen inte som webapp men iaf)
EDIT: Förutom att co-owner taggen kommer inuti owner taggen, om det inte ska vara så har du tappat bort ett
1 | writer.WriteEndElement(); |
Svara
Sv:Har problem med en xmltextwriter som inte uppdateras...
Jag har faktiskt ingen aning heller - men felet är alltså att datat inte byggs på i de andra rutinen, bara den första. Det jag fick göra var att deklarera writer som private och därigenom slippa skicka med objektet mellan funktionerna, då fungerade det.
Dock vore det väldigt roligt och veta varför jag gör fel.
Svara
Sv: Har problem med en xmltextwriter som inte uppdateras...
Koperade in din originalkod i en ASP.NET app för att söka felet men det fungerade utan problem när jag testkörde. Jag kör VS2005.
Resultatet:
<?xml version="1.0" encoding="utf-8"?>
<fi2energystatement>
<fi2estatement_guid>508817f2-0758-42cb-b8fd-b4b0d0d989c2</fi2estatement_guid>
<fi2estatement_owner>
<fi2part_ids>
<fi2_id usage="GUID" owner="fi2">508817f2-0758-42cb-b8fd-b4b0d0d989c2</fi2_id>
<fi2part_class>
<fi2class_code>02</fi2class_code>
<fi2part_scheme>
<fi2class_id>CA000_005_001</fi2class_id>
<fi2class_name>Klassificering fi2partner</fi2class_name>
</fi2part_scheme>
</fi2part_class>
<fi2part_name>Ägarnamn</fi2part_name>
<fi2part_orgidcode>556565-1234</fi2part_orgidcode>
<fi2part_tel>08-695 60 00</fi2part_tel>
<fi2part_mobtel>0730-123 456</fi2part_mobtel>
<fi2part_email>123@456.se</fi2part_email>
<fi2part_address>
<fi2addr_class>
<fi2class_code>05</fi2class_code>
<fi2class_scheme>
<fi2scheme_id>CA000_007_001</fi2scheme_id>
<fi2scheme_name>Klassificeringsadresser</fi2scheme_name>
</fi2class_scheme>
</fi2addr_class>
<fi2addr_addrline>Adress</fi2addr_addrline>
<fi2addr_zipcode>12345</fi2addr_zipcode>
<fi2addr_city>Postort</fi2addr_city>
</fi2part_address>
</fi2part_ids>
<fi2estatement_coowner>
<fi2part_ids>
<fi2_id usage="GUID" owner="fi2">508817f2-0758-42cb-b8fd-b4b0d0d989c2</fi2_id>
</fi2part_ids>
<fi2part_class>
<fi2class_code>02</fi2class_code>
<fi2part_scheme>
<fi2class_id>CA000_005_001</fi2class_id>
<fi2class_name>Klassificering fi2partner</fi2class_name>
</fi2part_scheme>
</fi2part_class>
<fi2part_name>Övrig ägare namn</fi2part_name>
<fi2part_orgidcode>651212-1234</fi2part_orgidcode>
</fi2estatement_coowner>
</fi2estatement_owner>
</fi2energystatement>
Svara
Sv:Har problem med en xmltextwriter som inte uppdateras...
Hur gick det med detta, lite response Pelle?
Svara
Sv: Har problem med en xmltextwriter som inte uppdateras...
Hej , skrev in det 2 inlägg uppåt men kan ta det igen.
Det som hände var att objektet tömdes hela tiden, eller rättare sagt inte fylldes på. Det jag gjorde var att skapa objektet private och på så sätt låta det leva genom funktionerna.
Svara