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? Var inne på att köra ref .. Fick också ändra så anropet blev .. Har ingen aning om vad det beror på, lite felsökningstips dock: hmm, klistrade in orginalkoden och körde den i princip as is, den funkade som sig bör. (Visserligen inte som webapp men iaf) 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. 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. Hur gick det med detta, lite response Pelle? Hej , skrev in det 2 inlägg uppåt men kan ta det igen. Har problem med en xmltextwriter som inte uppdateras...
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.
<asp:Button ID="Button1" runat="server" Text="Generera XML" OnClick="Button1_Click" /></div>
<asp:Literal ID="literal1" runat="server" />
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;
}
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)Sv:Har problem med en xmltextwriter som inte uppdateras...
fi2estatement_owner(ref writer, randomguid);
fi2estatement_coowner(ref writer, randomguid);
Men det hjälper inte. Har säkert missat nåt larvigt ..Sv: Har problem med en xmltextwriter som inte uppdateras...
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å?
/JohanSv: Har problem med en xmltextwriter som inte uppdateras...
EDIT: Förutom att co-owner taggen kommer inuti owner taggen, om det inte ska vara så har du tappat bort ett
writer.WriteEndElement();
Sv:Har problem med en xmltextwriter som inte uppdateras...
Dock vore det väldigt roligt och veta varför jag gör fel.Sv: Har problem med en xmltextwriter som inte uppdateras...
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>Sv:Har problem med en xmltextwriter som inte uppdateras...
Sv: Har problem med en xmltextwriter som inte uppdateras...
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.