Avatar billede jemsh Nybegynder
09. maj 2004 - 11:43 Der er 15 kommentarer

ASP.NET: Oprette en ny Xml-fil vha. XmlDocument XmlSchema

Jeg vil kunne oprette en tom xml-fil udfra et XmlSchema (en .xsd-fil), som har alle informationerne om strukturen i filen. Her er den kode, jeg har forsøgt mig med:

private void CreateButton_Click(object sender,System.EventArgs e)
       
{
  string filename =FilNavnTextBox.Text;
  XmlDocument NyXml = new XmlDocument();
  XmlDeclaration decl;
  decl= NyXml.CreateXmlDeclaration  ("1.0","musikliste.xsd", "no");
  NyXml.InsertBefore(decl,NyXml.DocumentElement);
  NyXml.Save("http://localhost/NyPlaylist/"+"filename"+".xml");
}

Fejlmeddelelsen lyder således:

System.Xml.XmlException: This an invalid XML document, The document does not have a root element..

Nu er rodelementet jo defineret i XmlSchemaet, men det kan åbenbart ikke hentes. Jeg har ellers forstået at den anden paramete i constructoren til XmlDeclarationen netop skulle være et det externe skema, hvis et sådant findes. Men der er åbenbart et eller andet galt!
Avatar billede arne_v Ekspert
09. maj 2004 - 11:50 #1
Mit gæt er at den brokker sig fordi du sifer at den XML deklaration skal indsættes
før root elementer og der er ikke noget root element.

Hvad sker der hvis du først indsætter root element og så den XML deklaration ?
Avatar billede jemsh Nybegynder
09. maj 2004 - 12:27 #2
Jeg ved ikke helt, hvordan man gør det manuelt. Constructoren for XmlElement kræver: (string prefix, string localname, string namespaceURI og XmlDocuent)
Jeg er lidt usikker på nogle af parametrene, men jeg får følgende besked fra compileren når jeg prøver at oprette et nyt Element:

C:\NyPlaylist\Admin.aspx.cs(74): 'System.Xml.XmlElement.XmlElement(string, string, string, System.Xml.XmlDocument)' is inaccessible due to its protection level

??

Jeg ville ønske, der var en property i XmlSchema, der hed RootElement eller sådan noget, men jeg kan ikke finde noget, der ligner..
Avatar billede arne_v Ekspert
09. maj 2004 - 12:29 #3
Du bruger ikke XmlElement constructor til at lave et element med men
XmlDocument CreateElement
Avatar billede arne_v Ekspert
09. maj 2004 - 12:29 #4
Super simpelt eksempel:

using System;
using System.Xml;

class MainClass
{
    public static void Main(string[] args)
    {
        XmlDocument doc = new XmlDocument();
        XmlElement root = doc.CreateElement("all");
        doc.AppendChild(root);
        XmlElement elm = doc.CreateElement("one");
        root.AppendChild(elm);
        elm.AppendChild(doc.CreateTextNode("noget"));
        doc.Save(Console.Out);
    }
}
Avatar billede jemsh Nybegynder
09. maj 2004 - 12:30 #5
Property DocumentElement skal hente root element. (Min tanke er jo, at den skal bruge skemaet, jeg skal nemlig oprette mange xml-filer over det samme skema..)
Avatar billede arne_v Ekspert
09. maj 2004 - 12:31 #6
Iøvrigt undrer jeg mig lidt over din brug af CreateXmlDeclaration. Docs siger:

public virtual XmlDeclaration CreateXmlDeclaration(
  string version,
  string encoding,
  string standalone
);
Avatar billede arne_v Ekspert
09. maj 2004 - 12:33 #7
Og et schema opretter vel ikke noget som helst. Det er en beskrivelse af
hvad der er validt.

XML dokument ~= dansk stil
schema ~= retskrivnings reglerne
Avatar billede jemsh Nybegynder
09. maj 2004 - 12:40 #8
OK - det hjalp!! tak

Nu brokker den sig bare over min xsd-fil. Den må ikke stå som encoding-parameter i XmlDeclaration. Nå. Ved du noget om, hvordan man så kan bruge det fine XmlSchema til at lave nye xml-filer udfra? (jeg kan selvfølgelig knalde tagsene ind i hånden en gang for alle, men det ville da være smartere, at kunne bruge et skema, når man nu har et..)
Avatar billede arne_v Ekspert
09. maj 2004 - 12:44 #9
Normalt validere man mod schema når man læser en ekstern fil ind i et XmlDocument.

Jeg er ikke klar over om man kan validere on the fly når man appender noder.

Jeg har svært ved at se hvordan man skal lave et XML dokument udfra et schema.

Der er jo en trillion trilliard forskellige XML dokumenter som matcher
et givet schema.
Avatar billede jemsh Nybegynder
09. maj 2004 - 12:45 #10
Ja - det er blot fordi der i min udmærkede bog står, at parametren encoding skal bruges, hvis der et skema at validere imod...  Men det ser mere ud som om encoding handler om Unicode kodningen..
Avatar billede jemsh Nybegynder
09. maj 2004 - 12:48 #11
Du har nok ret, det kan vist ikke lade sig gøre på den måde...
Avatar billede arne_v Ekspert
09. maj 2004 - 12:51 #12
encoding kan du bruge til at fortælle om det er ISO-8859-1 eller UTF-8
Avatar billede arne_v Ekspert
09. maj 2004 - 13:23 #13
OK at jeg ligger et svar ?
Avatar billede jemsh Nybegynder
09. maj 2004 - 13:31 #14
Ja den er go nok :)
Avatar billede arne_v Ekspert
24. maj 2004 - 23:56 #15
Så mangler du bare at acceptere svarer
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