Sdílet prostřednictvím


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.