Sdílet prostřednictvím


Třída System.Xml.XmlTextWriter

Poznámka:

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 oborů názvů, který odpovídá všem oborům názvů definovaným v aktuálním zásobníku prvků. Pomocí XmlTextWriter můžete obory názvů deklarovat 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 předešlo jejímu duplikování na dvou podřízených prvcích. Podřízené prvky přebírají 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ý URI oboru názvů, aby se vytvořil XML text <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();

Pokud existuje více deklarací oboru názvů, které mapují různé předpony na stejný identifikátor URI oboru názvů, XmlTextWriter prohledává zásobník deklarací oboru názvů odzadu a vybere tu nejbližší deklaraci.

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# použije zapisovatel poslední předponu vloženou do zásobníku oboru názvů, protože volání WriteAttributeString neurčí předponu, a vytvoří následující 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 je vyřeší 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á části 5.2 doporučení W3C o názvových prostorech v 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 koncovou značku přidá další mezera, například <item />. To zajišťuje kompatibilitu se staršími prohlížeči.

Když je String používán jako parametr metody, null a String.Empty jsou ekvivalentní. String.Empty se řídí pravidly W3C.

Chcete-li zapisovat data v silném typovém systému, použijte třídu XmlConvert k převodu datových typů na řetězce. 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 nepřevede znaky Unicode na entity 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 jiné aplikaci, podkladní datový proud je té aplikaci zpřístupněn. Pokud potřebujete předat XmlTextWriter částečně důvěryhodné aplikaci, měli byste použít objekt XmlWriter, 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řijímejte podpůrné komponenty, jako například objekt Encoding, z nedůvěryhodného zdroje.