Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.
Klasa XmlTextWriter implementuje klasę XmlWriter .
Uwaga / Notatka
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 aktualnej deklaracji przestrzeni nazw. W poniższym przykładzie identyfikator URI przestrzeni nazw "123" jest zastępowany przez "abc", aby utworzyć element XML <x:node xmlns:x="abc"/>.
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 URI przestrzeni nazw, aby utworzyć tekst XML <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();
Jeśli istnieje wiele deklaracji przestrzeni nazw mapujących różne prefiksy na ten sam identyfikator URI przestrzeni nazw, XmlTextWriter przejdzie przez stos deklaracji przestrzeni nazw wstecz i zwróci najbliższą.
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ż wywołanie funkcji WriteAttributeString nie określa prefiksu, pisarz używa ostatniego prefiksu umieszczonego na stosie przestrzeni nazw i generuje 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, moduł zapisujący generuje prefiks dla 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 metody, null i String.Empty są równoważne.
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,
XmlTextWriternie przekształca ich w encje znaków. - Zduplikowane atrybuty.
- Znaki w publicznym identyfikatorze DOCTYPE lub identyfikatorze systemowym.
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órych nie chcesz, aby były przekazywane do aplikacji. Aplikacje muszą przechwytywać wyjątki i przetwarzać je odpowiednio.
Po przekazaniu XmlTextWriter do innej aplikacji, podstawowy strumień jest udostępniony 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 do metod WriteDocType ani 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.