System.Xml.XmlTextWriter – třída
Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.
Třída XmlTextWriter implementuje XmlWriter třídu.
Poznámka:
Doporučujeme vytvářet XmlWriter instance pomocí XmlWriter.Create metody a XmlWriterSettings třídy, abyste mohli využívat nové funkce.
XmlTextWriter
udržuje zásobník oboru názvů odpovídající všem oborům názvů definovaným v aktuálním zásobníku prvků. Použití XmlTextWriter
můžete deklarovat obory názvů ručně.
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();
Výše uvedený kód jazyka C# vytvoří následující výstup. XmlTextWriter
propaguje deklaraci oboru názvů na kořenový prvek, aby se zabránilo jeho duplikování na dvou podřízených prvcích. Podřízené prvky vyzvednou předponu z deklarace oboru názvů.
<root xmlns:x="urn:1">
<x:item/>
<x:item/>
</x:root>
XmlTextWriter
umožňuje také přepsat aktuální deklaraci oboru názvů. V následujícím příkladu je identifikátor URI oboru názvů 123 přepsán "abc" k vytvoření elementu <x:node xmlns:x="abc"/>
XML .
w.WriteStartElement("x","node","123");
w.WriteAttributeString("xmlns","x",null,"abc");
Pomocí metod zápisu, které přebírají předponu jako argument, můžete také určit, kterou předponu použít. V následujícím příkladu se namapují dvě různé předpony na stejný identifikátor URI oboru názvů, aby se vytvořil text <x:root xmlns:x="urn:1"><y:item xmlns:y="urn:1"/></x:root>
XML .
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
Pokud existuje více deklarací oboru názvů, které mapují různé předpony na stejný identifikátor URI oboru názvů, XmlTextWriter
provede zásobník deklarací oboru názvů zpět a vybere nejbližší.
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();
Ve výše uvedeném příkladu jazyka C#, protože WriteAttributeString
volání neurčí předponu, použije zapisovač poslední předponu vloženou do zásobníku oboru názvů a vytvoří následující KÓD XML:
<x:root xmlns:x="urn:1">
<y:item y:attr="123" xmlns:y="urn:1" />
</x:root>
Pokud dojde ke konfliktům oboru názvů, XmlTextWriter
vyřešte je generováním alternativních předpon. Pokud například atribut a element mají stejnou předponu, ale různé obory názvů, XmlWriter
vygeneruje alternativní předponu atributu. Vygenerované předpony jsou pojmenovány n{i}
, kde i
je číslo začínající na 1. Číslo se pro každý prvek resetuje na 1.
Atributy přidružené k identifikátoru URI oboru názvů musí mít předponu (výchozí obory názvů se nevztahují na atributy). To odpovídá oddílu 5.2 oborů názvů W3C v doporučení XML. Pokud atribut odkazuje na identifikátor URI oboru názvů, ale nezadá předponu, zapisovač vygeneruje předponu atributu.
Při psaní prázdného prvku se mezi název značky a pravou značkou přidá další mezera, například <item />
. To zajišťuje kompatibilitu se staršími prohlížeči.
String
Pokud se používá jako parametr null
metody a String.Empty
jsou ekvivalentní. String.Empty
se řídí pravidly W3C.
Chcete-li zapisovat data silného XmlConvert typu, použijte třídu k převodu datových typů na řetězec. Například následující kód jazyka C# převede data z Double
do String
a zapíše element <price>19.95</price>
.
Double price = 19.95;
writer.WriteElementString("price", XmlConvert.ToString(price));
XmlTextWriter
nekontroluje následující:
- Neplatné znaky v názvech atributů a elementů
- Znaky Unicode, které neodpovídají zadanému kódování. Pokud se znaky Unicode nevejdou do zadaného kódování,
XmlTextWriter
neukáže znaky Unicode do entit znaků. - Duplicitní atributy
- Znaky ve veřejném identifikátoru DOCTYPE nebo systémovém identifikátoru.
Bezpečnostní aspekty
Při práci s XmlTextWriter třídou je potřeba vzít v úvahu následující položky.
Výjimky vyvolané XmlTextWriter můžou odhalit informace o cestě, které nechcete bublinovat až do aplikace. Vaše aplikace musí zachytit výjimky a odpovídajícím způsobem je zpracovat.
Když předáte XmlTextWriter jinou aplikaci, podkladový datový proud se této aplikaci zobrazí. Pokud potřebujete předat XmlTextWriter částečně důvěryhodnou aplikaci, měli byste místo toho použít XmlWriter objekt vytvořený metodou Create .
Neověřuje XmlTextWriter žádná data, která jsou předána metodám WriteDocType nebo WriteRaw metodám. Těmto metodám byste neměli předávat libovolná data.
Pokud se výchozí nastavení změní, není zaručeno, že vygenerovaný výstup je správně formátovaná data XML.
Nepřijme podpůrné komponenty, jako Encoding je například objekt, z nedůvěryhodného zdroje.