Forum » Programiranje » [C#] Problem z XML
[C#] Problem z XML
RobyRob ::
Imam en problem z C# in XML.
Namreč, C# mi odstrani vsaki prefix pred atributom schemaLocation!
Jaz hočem atribut "xsi:schemaLocation", ko pogledam v .xml datoteko pa piše samo "schemaLocation".
C# koda:
XmlElement root = doc.CreateElement("root");
root.SetAttribute("xsi:schemaLocation", "http://www.imsglobal.org/xsd/imscp_v1p1 imscp_v1p1.xsd");
Izhodna XML datoteka:
<root schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1 imscp_v1p1.xsd">
Ko pa hočem prebrati to XML datoteko, pa seveda XML parser javi napako, ker manjka prefix "xsi:". Kaj za vraga je narobe?
Namreč, C# mi odstrani vsaki prefix pred atributom schemaLocation!
Jaz hočem atribut "xsi:schemaLocation", ko pogledam v .xml datoteko pa piše samo "schemaLocation".
C# koda:
XmlElement root = doc.CreateElement("root");
root.SetAttribute("xsi:schemaLocation", "http://www.imsglobal.org/xsd/imscp_v1p1 imscp_v1p1.xsd");
Izhodna XML datoteka:
<root schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1 imscp_v1p1.xsd">
Ko pa hočem prebrati to XML datoteko, pa seveda XML parser javi napako, ker manjka prefix "xsi:". Kaj za vraga je narobe?
darh ::
besede pred dvopičjem so AFAIK namespaces, ki pa jih nastavljaš drugače - z drugo funkcijo
Excuses are useless! Results are priceless!
RobyRob ::
Tole je rešitev:
//najprej definiras namespace s prefixom xsi:
root.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instan...
//zdaj pa uporabis overloaded funkcijo s 3 argumenti:
root.SetAttribute("schemaLocation", "http://www.w3.org/2001/XMLSchema-instan..., "imscp_v1p1.xsd");
Dobimo:
<root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan...
xsi:schemaLocation=""imscp_v1p1.xsd"
>
//najprej definiras namespace s prefixom xsi:
root.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instan...
//zdaj pa uporabis overloaded funkcijo s 3 argumenti:
root.SetAttribute("schemaLocation", "http://www.w3.org/2001/XMLSchema-instan..., "imscp_v1p1.xsd");
Dobimo:
<root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan...
xsi:schemaLocation=""imscp_v1p1.xsd"
>
RobyRob ::
OK, imam še en problemček...
Narediti moram XML datoteko, ki jo bo potem uporabil en Java program, ki uporablja Apache Xerces XML Parser.
Rad bi seveda, da ima XML datoteka kodiranje UTF-8. Vendar C# doda na začetek UTF-8 datoteke dva posebna bajta (BOM - Byte Order Mark), ki ju Xerces ne pozna in zato javi napako( "content is not allowed in prolog").
Sledeča C# koda bi baje morala narediti UTF-8 datoteko brez BOM-a:
XmlDocument doc = new XmlDocument();
// naredimo nekaj XML elementov...
XmlTextWriter writer = new XmlTextWriter("file.xml", new System.Text.UTF8Encoding(false));
doc.Save(writer);
Vendar C# iz neznanega razloga še vedno doda BOM.
Komu kaj znano?
Narediti moram XML datoteko, ki jo bo potem uporabil en Java program, ki uporablja Apache Xerces XML Parser.
Rad bi seveda, da ima XML datoteka kodiranje UTF-8. Vendar C# doda na začetek UTF-8 datoteke dva posebna bajta (BOM - Byte Order Mark), ki ju Xerces ne pozna in zato javi napako( "content is not allowed in prolog").
Sledeča C# koda bi baje morala narediti UTF-8 datoteko brez BOM-a:
XmlDocument doc = new XmlDocument();
// naredimo nekaj XML elementov...
XmlTextWriter writer = new XmlTextWriter("file.xml", new System.Text.UTF8Encoding(false));
doc.Save(writer);
Vendar C# iz neznanega razloga še vedno doda BOM.
Komu kaj znano?
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Davčne blagajne (strani: 1 2 3 4 … 24 25 26 27 )Oddelek: Programiranje | 334331 (74334) | Macketina |
» | E-računOddelek: Programiranje | 7533 (4296) | ivanhoe5x |
» | [C#] Xml Serializacija Attribut pred NamespaceOddelek: Programiranje | 969 (855) | Looooooka |
» | [C#] Simobilov GlasnikOddelek: Programiranje | 4360 (1440) | Mrch |
» | XHTML reference?Oddelek: Izdelava spletišč | 1710 (1531) | darh |