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.