Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.
Klassen XmlTextWriter implementerar XmlWriter klassen.
Anmärkning
Vi rekommenderar att du skapar XmlWriter instanser med hjälp av XmlWriter.Create metoden och XmlWriterSettings klassen för att dra nytta av den nya funktionaliteten.
XmlTextWriter upprätthåller en namnområdesstack som motsvarar alla namnområden som definierats i den aktuella elementstacken. Med hjälp av XmlTextWriter kan du deklarera namnområden manuellt.
w.WriteStartElement("root");
w.WriteAttributeString("xmlns", "x", null, "urn:1");
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
C#-koden ovan genererar följande utdata.
XmlTextWriter höjer upp namnområdesdeklarationen till rotelementet för att undvika att den dupliceras på de två underordnade elementen. De underordnade elementen hämtar prefixet från namnområdesdeklarationen.
<root xmlns:x="urn:1">
<x:item/>
<x:item/>
</x:root>
XmlTextWriter gör också att du kan åsidosätta den aktuella namnområdesdeklarationen. I följande exempel åsidosättas namnområdets URI "123" av "abc" för att skapa XML-elementet <x:node xmlns:x="abc"/>.
w.WriteStartElement("x","node","123");
w.WriteAttributeString("xmlns","x",null,"abc");
Genom att använda skrivmetoderna som tar ett prefix som argument kan du också ange vilket prefix som ska användas. I följande exempel mappas två olika prefix till samma namnområdes-URI för att skapa XML-texten <x:root xmlns:x="urn:1"><y:item xmlns:y="urn:1"/></x:root>.
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
Om det finns flera namnområdesdeklarationer som mappar olika prefix till samma namnområdes-URI går XmlTextWriter stacken med namnområdesdeklarationer bakåt och väljer den närmaste.
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.Formatting = Formatting.Indented;
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteAttributeString("attr","urn:1","123");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
I C#-exemplet ovan, eftersom anropet WriteAttributeString inte anger något prefix, använder skrivaren det sista prefixet som push-överförts till namnområdesstacken och skapar följande XML:
<x:root xmlns:x="urn:1">
<y:item y:attr="123" xmlns:y="urn:1" />
</x:root>
Om namnområdeskonflikter uppstår XmlTextWriter löser du dem genom att generera alternativa prefix. Om ett attribut och element till exempel har samma prefix men olika namnområden XmlWriter genererar ett alternativt prefix för attributet. De genererade prefixen namnges n{i} där i är ett tal som börjar på 1. Talet återställs till 1 för varje element.
Attribut som är associerade med en namnområdes-URI måste ha ett prefix (standardnamnområden gäller inte för attribut). Detta överensstämmer med avsnitt 5.2 i W3C-namnrymderna i XML-rekommendationen. Om ett attribut refererar till en namnområdes-URI, men inte anger något prefix, genererar skrivaren ett prefix för attributet.
När du skriver ett tomt element läggs ytterligare utrymme till mellan taggnamnet och den avslutande taggen, till exempel <item />. Detta ger kompatibilitet med äldre webbläsare.
När en String används som metodparameter null och String.Empty är likvärdig.
String.Empty följer W3C-reglerna.
Om du vill skriva starkt inskrivna data använder du XmlConvert klassen för att konvertera datatyper till strängar. Följande C#-kod konverterar till exempel data från Double till String och skriver elementet <price>19.95</price>.
Double price = 19.95;
writer.WriteElementString("price", XmlConvert.ToString(price));
XmlTextWriter söker inte efter följande:
- Ogiltiga tecken i attribut- och elementnamn.
- Unicode-tecken som inte passar den angivna kodningen. Om Unicode-tecknen inte passar den angivna kodningen, konverteras inte Unicode-tecknen till teckenentiteter.
- Duplicerade attribut.
- Tecken i den offentliga DOCTYPE-identifieraren eller systemidentifieraren.
Säkerhetsfrågor
Följande objekt är saker att tänka på när du arbetar med XmlTextWriter klassen.
Undantag som genereras av XmlTextWriter kan avslöja sökvägsinformation som du inte vill ska bubbla upp till programmet. Dina program måste fånga undantag och bearbeta dem på rätt sätt.
När du skickar XmlTextWriter till ett annat program exponeras den underliggande strömmen för programmet. Om du behöver skicka XmlTextWriter till ett halvbetrott program bör du i stället använda ett XmlWriter-objekt som har skapats av Create-metoden.
XmlTextWriter Verifierar inte några data som skickas till WriteDocType metoderna ellerWriteRaw. Du bör inte skicka godtyckliga data till dessa metoder.
Om standardinställningarna ändras finns det ingen garanti för att de genererade utdata är välformulerade XML-data.
Acceptera inte stödkomponenter, till exempel ett Encoding objekt, från en ej betrodd källa.