Udostępnij za pośrednictwem


System.Xml.XmlTextWriter, klasa

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

Klasa XmlTextWriter implementuje klasę XmlWriter .

Uwaga

Zalecamy tworzenie XmlWriter wystąpień przy użyciu XmlWriter.Create metody i XmlWriterSettings klasy, aby korzystać z nowych funkcji.

XmlTextWriter utrzymuje stos przestrzeni nazw odpowiadający wszystkim przestrzeniom nazw zdefiniowanym w bieżącym stosie elementów. Za pomocą XmlTextWriter funkcji można ręcznie zadeklarować przestrzenie nazw.

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();

Powyższy kod języka C# generuje następujące dane wyjściowe. XmlTextWriter promuje deklarację przestrzeni nazw do elementu głównego, aby uniknąć zduplikowania go na dwóch elementach podrzędnych. Elementy podrzędne pobierają prefiks z deklaracji przestrzeni nazw.

<root xmlns:x="urn:1">
<x:item/>
<x:item/>
</x:root>

XmlTextWriter Umożliwia również zastąpienie bieżącej deklaracji przestrzeni nazw. W poniższym przykładzie identyfikator URI przestrzeni nazw "123" jest zastępowany przez element "abc", aby utworzyć element <x:node xmlns:x="abc"/>XML .

w.WriteStartElement("x","node","123");
w.WriteAttributeString("xmlns","x",null,"abc");

Używając metod zapisu, które przyjmują prefiks jako argument, można również określić prefiks, który ma być używany. W poniższym przykładzie dwa różne prefiksy są mapowane na ten sam identyfikator URI przestrzeni nazw, aby utworzyć tekst <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();

Jeśli istnieje wiele deklaracji przestrzeni nazw mapowania różnych prefiksów na ten sam identyfikator URI przestrzeni nazw, XmlTextWriter przeprowadzi stos deklaracji przestrzeni nazw wstecz i wybierze najbliższy.

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();

W powyższym przykładzie języka C#, ponieważ WriteAttributeString wywołanie nie określa prefiksu, składnik zapisywania używa ostatniego prefiksu wypchniętego do stosu przestrzeni nazw i tworzy następujący kod XML:

<x:root xmlns:x="urn:1">
<y:item y:attr="123" xmlns:y="urn:1" />
</x:root>

Jeśli wystąpią konflikty przestrzeni nazw, rozwiąże je, XmlTextWriter generując alternatywne prefiksy. Jeśli na przykład atrybut i element mają ten sam prefiks, ale różne przestrzenie nazw, XmlWriter generuje alternatywny prefiks atrybutu. Wygenerowane prefiksy mają nazwę n{i} where i to liczba rozpoczynająca się od 1. Liczba jest resetowana do 1 dla każdego elementu.

Atrybuty skojarzone z identyfikatorem URI przestrzeni nazw muszą mieć prefiks (domyślne przestrzenie nazw nie mają zastosowania do atrybutów). Jest to zgodne z sekcją 5.2 zaleceń dotyczących przestrzeni nazw W3C w języku XML. Jeśli atrybut odwołuje się do identyfikatora URI przestrzeni nazw, ale nie określa prefiksu, składnik zapisywania generuje prefiks atrybutu.

Podczas pisania pustego elementu zostanie dodane dodatkowe miejsce między nazwą tagu a tagiem zamykającym, na przykład <item />. Zapewnia to zgodność ze starszymi przeglądarkami.

Gdy element String jest używany jako parametr null metody i String.Empty jest równoważny. String.Empty jest zgodny z regułami W3C.

Aby zapisać silnie typizowane dane, użyj XmlConvert klasy , aby przekonwertować typy danych na ciąg. Na przykład poniższy kod w języku C# konwertuje dane z Double na String i zapisuje element <price>19.95</price>.

Double price = 19.95;
writer.WriteElementString("price", XmlConvert.ToString(price));

XmlTextWriter program nie sprawdza następujących elementów:

  • Nieprawidłowe znaki w nazwach atrybutów i elementów.
  • Znaki Unicode, które nie pasują do określonego kodowania. Jeśli znaki Unicode nie pasują do określonego kodowania, XmlTextWriter znaki Unicode nie zostaną ucieczki do jednostek znaków.
  • Zduplikowane atrybuty.
  • Znaki w identyfikatorze publicznym lub identyfikatorze systemu DOCTYPE.

Zagadnienia dotyczące zabezpieczeń

Podczas pracy z klasą XmlTextWriter należy wziąć pod uwagę następujące elementy.

  • Wyjątki zgłaszane przez program XmlTextWriter mogą ujawniać informacje o ścieżkach, które nie mają być przekazywane do aplikacji. Aplikacje muszą przechwytywać wyjątki i przetwarzać je odpowiednio.

  • Po przekazaniu XmlTextWriter elementu do innej aplikacji podstawowy strumień jest uwidoczniony dla tej aplikacji. Jeśli musisz przekazać element XmlTextWriter do częściowo zaufanej aplikacji, należy zamiast tego użyć XmlWriter obiektu utworzonego przez metodę Create .

  • Element XmlTextWriter nie weryfikuje żadnych danych przekazywanych WriteDocType do metod lub WriteRaw . Nie należy przekazywać dowolnych danych do tych metod.

  • Jeśli ustawienia domyślne zostaną zmienione, nie ma gwarancji, że wygenerowane dane wyjściowe są poprawnie sformułowanymi danymi XML.

  • Nie akceptuj składników pomocniczych, takich jak Encoding obiekt, z niezaufanego źródła.