System.Xml Przestrzeń nazw

Przestrzeń nazw System.Xml zawiera oparte na standardach wsparcie dla przetwarzania kodu XML. The System.Xml namespace provides standards-based support for processing XML.

Klasy

NameTable

Implementuje XmlNameTablejednowątkowy.Implements a single-threaded XmlNameTable.

UniqueId

Unikatowy identyfikator zoptymalizowany pod kątem identyfikatorów GUID.A unique identifier optimized for Guids.

XmlAttribute

Reprezentuje atrybut.Represents an attribute. Prawidłowe i domyślne wartości atrybutu są zdefiniowane w definicji typu dokumentu (DTD) lub schemacie.Valid and default values for the attribute are defined in a document type definition (DTD) or schema.

XmlAttributeCollection

Reprezentuje kolekcję atrybutów, do których można uzyskać dostęp za pomocą nazwy lub indeksu.Represents a collection of attributes that can be accessed by name or index.

XmlBinaryReaderSession

Włącza zoptymalizowane ciągi, które mają być zarządzane w sposób dynamiczny.Enables optimized strings to be managed in a dynamic way.

XmlBinaryWriterSession

Umożliwia korzystanie z słownika dynamicznego w celu kompresowania wspólnych ciągów, które są wyświetlane w komunikacie i utrzymują stan.Enables using a dynamic dictionary to compress common strings that appear in a message and maintain state.

XmlCDataSection

Przedstawia sekcję CDATA.Represents a CDATA section.

XmlCharacterData

Zapewnia metody manipulowania tekstem, które są używane przez kilka klas.Provides text manipulation methods that are used by several classes.

XmlComment

Reprezentuje zawartość komentarza XML.Represents the content of an XML comment.

XmlConvert

Koduje i dekoduje nazwy XML i oferuje metody konwersji między typami środowiska uruchomieniowego języka wspólnego i typami języka definicji schematu XML (XSD).Encodes and decodes XML names, and provides methods for converting between common language runtime types and XML Schema definition language (XSD) types. Podczas konwertowania typów danych zwracane wartości są niezależne od ustawień regionalnych.When converting data types, the values returned are locale-independent.

XmlDataDocument

Umożliwia przechowywanie, pobieranie i manipulowanie strukturami danych za pomocą DataSetrelacyjnego.Allows structured data to be stored, retrieved, and manipulated through a relational DataSet.

XmlDeclaration

Reprezentuje węzeł deklaracji XML <? wersja XML = "1.0"...?>.Represents the XML declaration node <?xml version='1.0'...?>.

XmlDictionary

Implementuje słownik używany do optymalizowania implementacji czytnika/składnika zapisywania XML Windows Communication Foundation (WCF).Implements a dictionary used to optimize Windows Communication Foundation (WCF)'s XML reader/writer implementations.

XmlDictionaryReader

Klasa abstract, której Windows Communication Foundation (WCF) pochodzi od XmlReader do wykonania serializacji i deserializacji.An abstract class that the Windows Communication Foundation (WCF) derives from XmlReader to do serialization and deserialization.

XmlDictionaryReaderQuotas

Zawiera konfigurowalne wartości przydziału dla XmlDictionaryReaders.Contains configurable quota values for XmlDictionaryReaders.

XmlDictionaryString

Reprezentuje wpis zapisany w XmlDictionary.Represents an entry stored in a XmlDictionary.

XmlDictionaryWriter

Reprezentuje klasę abstrakcyjną, która Windows Communication Foundation (WCF) pochodzi od XmlWriter do wykonania serializacji i deserializacji.Represents an abstract class that Windows Communication Foundation (WCF) derives from XmlWriter to do serialization and deserialization.

XmlDocument

Reprezentuje dokument XML.Represents an XML document. Za pomocą tej klasy można ładować, weryfikować, edytować, dodawać i pozycjonować XML w dokumencie.You can use this class to load, validate, edit, add, and position XML in a document.

XmlDocumentFragment

Reprezentuje obiekt lekki, który jest przydatny dla operacji wstawiania drzewa.Represents a lightweight object that is useful for tree insert operations.

XmlDocumentType

Reprezentuje deklarację typu dokumentu.Represents the document type declaration.

XmlDocumentXPathExtensions

Provides extension methods for the XmlDocument and XmlNode for document navigation.

XmlElement

Reprezentuje element.Represents an element.

XmlEntity

Reprezentuje deklarację jednostki, taką jak <! JEDNOSTKA... >.Represents an entity declaration, such as <!ENTITY... >.

XmlEntityReference

Reprezentuje węzeł odwołania do jednostki.Represents an entity reference node.

XmlException

Zwraca szczegółowe informacje o ostatnim wyjątku.Returns detailed information about the last exception.

XmlImplementation

Definiuje kontekst dla zestawu obiektów XmlDocument.Defines the context for a set of XmlDocument objects.

XmlLinkedNode

Pobiera węzeł bezpośrednio poprzedzający ten węzeł lub następujący.Gets the node immediately preceding or following this node.

XmlNamedNodeMap

Reprezentuje kolekcję węzłów, do których można uzyskać dostęp za pomocą nazwy lub indeksu.Represents a collection of nodes that can be accessed by name or index.

XmlNamespaceManager

Rozpoznaje, dodaje i usuwa przestrzenie nazw do kolekcji i zapewnia Zarządzanie zakresem dla tych przestrzeni nazw.Resolves, adds, and removes namespaces to a collection and provides scope management for these namespaces.

XmlNameTable

Tabela obiektów ciągów atomowych.Table of atomized string objects.

XmlNode

Reprezentuje pojedynczy węzeł dokumentu XML.Represents a single node in the XML document.

XmlNodeChangedEventArgs

Udostępnia dane dla NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved i NodeRemoving zdarzeń.Provides data for the NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved and NodeRemoving events.

XmlNodeList

Reprezentuje uporządkowaną kolekcję węzłów.Represents an ordered collection of nodes.

XmlNodeReader

Reprezentuje czytnik, który zapewnia szybki, niebuforowany dostęp do danych XML w XmlNode.Represents a reader that provides fast, non-cached forward only access to XML data in an XmlNode.

XmlNotation

Reprezentuje deklarację notacji, taką jak <! NOTACJa... >.Represents a notation declaration, such as <!NOTATION... >.

XmlParserContext

Udostępnia wszystkie informacje kontekstu wymagane przez XmlReader do analizowania fragmentu kodu XML.Provides all the context information required by the XmlReader to parse an XML fragment.

XmlProcessingInstruction

Reprezentuje instrukcję przetwarzania, która definiuje kod XML, aby zachować informacje specyficzne dla procesora w tekście dokumentu.Represents a processing instruction, which XML defines to keep processor-specific information in the text of the document.

XmlQualifiedName

Reprezentuje kwalifikowaną nazwę XML.Represents an XML qualified name.

XmlReader

Reprezentuje czytnik zapewniający szybkie i niebuforowane dostęp do danych XML.Represents a reader that provides fast, noncached, forward-only access to XML data.

XmlReaderSettings

Określa zestaw funkcji do obsługi na obiekcie XmlReader utworzonym przez metodę Create.Specifies a set of features to support on the XmlReader object created by the Create method.

XmlResolver

Rozpoznaje zewnętrzne zasoby XML o nazwie Uniform Resource Identifier (URI).Resolves external XML resources named by a Uniform Resource Identifier (URI).

XmlSecureResolver

Pomaga zabezpieczyć kolejną implementacją XmlResolver przez zapakowanie obiektu XmlResolver i ograniczenie zasobów, do których XmlResolver ma dostęp.Helps to secure another implementation of XmlResolver by wrapping the XmlResolver object and restricting the resources that the underlying XmlResolver has access to.

XmlSignificantWhitespace

Reprezentuje białe miejsce między znakami w węźle zawartości mieszanej lub białym znakiem w postaci XML: Space = Scope "preserve".Represents white space between markup in a mixed content node or white space within an xml:space= 'preserve' scope. Jest to również nazywane znaczącym białym znakiem.This is also referred to as significant white space.

XmlText

Reprezentuje zawartość tekstową elementu lub atrybutu.Represents the text content of an element or attribute.

XmlTextReader

Reprezentuje czytnik, który zapewnia szybki, niebuforowany, dostęp do danych XML.Represents a reader that provides fast, non-cached, forward-only access to XML data.

Począwszy od .NET Framework 2,0 zalecamy użycie klasy XmlReader.Starting with the .NET Framework 2.0, we recommend that you use the XmlReader class instead.

XmlTextWriter

Reprezentuje składnik zapisywania, który zapewnia szybki, niebuforowany, tylko do przodu sposób generowania strumieni lub plików zawierających dane XML, które są zgodne XML W3C (XML) 1,0 i przestrzenie nazw w zaleceniach XML.Represents a writer that provides a fast, non-cached, forward-only way of generating streams or files containing XML data that conforms to the W3C Extensible Markup Language (XML) 1.0 and the Namespaces in XML recommendations.

Począwszy od .NET Framework 2,0 zalecamy użycie klasy XmlWriter.Starting with the .NET Framework 2.0, we recommend that you use the XmlWriter class instead.

XmlUrlResolver

Rozpoznaje zewnętrzne zasoby XML o nazwie Uniform Resource Identifier (URI).Resolves external XML resources named by a Uniform Resource Identifier (URI).

XmlValidatingReader

Reprezentuje czytnik, który zawiera definicję typu dokumentu (DTD), schemat danych XML (XDR) i sprawdzanie poprawności języka definicji schematu XML (XSD).Represents a reader that provides document type definition (DTD), XML-Data Reduced (XDR) schema, and XML Schema definition language (XSD) validation.

Ta klasa jest przestarzała.This class is obsolete. Począwszy od .NET Framework 2,0 zaleca się użycie klasy XmlReaderSettings i metody Create do tworzenia walidacji czytnika XML.Starting with the .NET Framework 2.0, we recommend that you use the XmlReaderSettings class and the Create method to create a validating XML reader.

XmlWhitespace

Reprezentuje biały znak w zawartości elementu.Represents white space in element content.

XmlWriter

Reprezentuje składnik zapisywania, który zapewnia szybki, niebuforowany, tylko do przodu sposób generowania strumieni lub plików, które zawierają dane XML.Represents a writer that provides a fast, non-cached, forward-only way to generate streams or files that contain XML data.

XmlWriterSettings

Określa zestaw funkcji do obsługi na obiekcie XmlWriter utworzonym przez metodę Create.Specifies a set of features to support on the XmlWriter object created by the Create method.

XmlXapResolver

Typ XmlXapResolver służy do rozwiązywania zasobów w pakiecie XAP aplikacji Silverlight.The XmlXapResolver type is used to resolve resources in the Silverlight application's XAP package.

Interfejsy

IApplicationResourceStreamResolver

Reprezentuje program rozpoznawania strumienia zasobów aplikacji.Represents an application resource stream resolver.

IFragmentCapableXmlDictionaryWriter

Zawiera właściwości i metody, które są implementowane przez XmlDictionaryWriter, umożliwiają przetwarzanie fragmentów XML.Contains properties and methods that when implemented by a XmlDictionaryWriter, allows processing of XML fragments.

IHasXmlNode

Umożliwia klasy zwracanie XmlNode z bieżącego kontekstu lub pozycji.Enables a class to return an XmlNode from the current context or position.

IStreamProvider

Reprezentuje interfejs, który może być zaimplementowany przez klasy dostarczające strumienie.Represents an interface that can be implemented by classes providing streams.

IXmlBinaryReaderInitializer

Zapewnia metody ponownego inicjowania czytnika binarnego w celu odczytania nowego dokumentu.Provides methods for reinitializing a binary reader to read a new document.

IXmlBinaryWriterInitializer

Określa wymagania implementacji dla binarnych składników zapisywania XML, które pochodzą z tego interfejsu.Specifies implementation requirements for XML binary writers that derive from this interface.

IXmlDictionary

interface, który definiuje kontrakt, który musi implementować słownik XML, aby mógł być używany przez implementacje XmlDictionaryReader i XmlDictionaryWriter.An interface that defines the contract that an Xml dictionary must implement to be used by XmlDictionaryReader and XmlDictionaryWriter implementations.

IXmlLineInfo

Zapewnia interfejs umożliwiający klasie Zwracanie informacji o wierszu i pozycji.Provides an interface to enable a class to return line and position information.

IXmlMtomReaderInitializer

Określa wymagania implementacji dla czytników MTOM XML, które pochodzą z tego interfejsu.Specifies implementation requirements for XML MTOM readers that derive from this interface.

IXmlMtomWriterInitializer

W przypadku implementacji przez składnik zapisywania usługi MTOM ten interfejs zapewnia inicjalizację modułu wypisującego MTOM.When implemented by an MTOM writer, this interface ensures initialization for an MTOM writer.

IXmlNamespaceResolver

Zapewnia dostęp tylko do odczytu do zestawu mapowań prefiksów i przestrzeni nazw.Provides read-only access to a set of prefix and namespace mappings.

IXmlTextReaderInitializer

Określa wymagania implementacji dla czytników tekstu XML, które pochodzą z tego interfejsu.Specifies implementation requirements for XML text readers that derive from this interface.

IXmlTextWriterInitializer

Określa wymagania implementacji dla składników zapisywania tekstu XML, które pochodzą z tego interfejsu.Specifies implementation requirements for XML text writers that derive from this interface.

Wyliczenia

ConformanceLevel

Określa ilość sprawdzanych danych wejściowych lub wyjściowych, które są wykonywane XmlReader i XmlWriter obiektów.Specifies the amount of input or output checking that XmlReader and XmlWriter objects perform.

DtdProcessing

Określa opcje przetwarzania definicji DTD.Specifies the options for processing DTDs. Wyliczenie DtdProcessing jest używane przez klasę XmlReaderSettings.The DtdProcessing enumeration is used by the XmlReaderSettings class.

EntityHandling

Określa, jak XmlTextReader lub XmlValidatingReader obsługiwać jednostki.Specifies how the XmlTextReader or XmlValidatingReader handle entities.

Formatting

Określa opcje formatowania dla XmlTextWriter.Specifies formatting options for the XmlTextWriter.

NamespaceHandling

Określa, czy należy usunąć zduplikowane deklaracje przestrzeni nazw w XmlWriter.Specifies whether to remove duplicate namespace declarations in the XmlWriter.

NewLineHandling

Określa, jak obsługiwać podziały wierszy.Specifies how to handle line breaks.

ReadState

Określa stan czytnika.Specifies the state of the reader.

ValidationType

Określa typ walidacji do wykonania.Specifies the type of validation to perform.

WhitespaceHandling

Określa, jak biały znak jest obsługiwany.Specifies how white space is handled.

WriteState

Określa stan XmlWriter.Specifies the state of the XmlWriter.

XmlDateTimeSerializationMode

Określa sposób traktowania wartości czasu podczas konwersji między ciągami i DateTime.Specifies how to treat the time value when converting between string and DateTime.

XmlDictionaryReaderQuotaTypes

Wylicza konfigurowalne wartości przydziału dla XmlDictionaryReaders.Enumerates the configurable quota values for XmlDictionaryReaders.

XmlNamespaceScope

Definiuje zakres przestrzeni nazw.Defines the namespace scope.

XmlNodeChangedAction

Określa typ zmiany węzła.Specifies the type of node change.

XmlNodeOrder

Opisuje kolejność dokumentów w węźle w porównaniu do drugiego węzła.Describes the document order of a node compared to a second node.

XmlNodeType

Określa typ węzła.Specifies the type of node.

XmlOutputMethod

Określa metodę używaną do serializacji danych wyjściowych XmlWriter.Specifies the method used to serialize the XmlWriter output.

XmlSpace

Określa bieżący zakres xml:space.Specifies the current xml:space scope.

XmlTokenizedType

Reprezentuje typ XML dla ciągu.Represents the XML type for the string. Umożliwia to odczytywanie ciągu jako określonego typu XML, na przykład typu sekcji CDATA.This allows the string to be read as a particular XML type, for example a CDATA section type.

Delegaci

OnXmlDictionaryReaderClose

delegate metody wywołania zwrotnego podczas zamykania czytnika.delegate for a callback method when closing the reader.

XmlNodeChangedEventHandler

Reprezentuje metodę, która obsługuje NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved i NodeRemoving zdarzeń.Represents the method that handles NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved and NodeRemoving events.

Uwagi

Obsługiwane standardySupported standards

Przestrzeń nazw System.Xml obsługuje następujące standardy:The System.Xml namespace supports these standards:

Zapoznaj się z sekcją różnice od specyfikacji W3C dla dwóch przypadków, w których klasy XML różnią się od zaleceń dotyczących W3C.See the section Differences from the W3C specs for two cases in which the XML classes differ from the W3C recommendations.

.NET Framework udostępnia również inne przestrzenie nazw dla operacji związanych z danymi XML.The .NET Framework also provides other namespaces for XML-related operations. Listę, opisy i linki znajdują się na stronie przestrzeni nazw System. XML .For a list, descriptions, and links, see the System.Xml Namespaces webpage.

Przetwarzanie pliku XML asynchronicznieProcessing XML asynchronously

Klasy System.Xml.XmlReader i System.Xml.XmlWriter obejmują wiele metod asynchronicznych opartych na modelu programowania asynchronicznego.The System.Xml.XmlReader and System.Xml.XmlWriter classes include a number of asynchronous methods that are based on the asynchronous programming model. Metody te mogą być identyfikowane przez ciąg "Async" na końcu swoich nazw.These methods can be identified by the string "Async" at the end of their names. Za pomocą tych metod można napisać kod asynchroniczny podobny do kodu synchronicznego i można łatwo zmigrować istniejący kod synchroniczny do kodu asynchronicznego.With these methods, you can write asynchronous code that's similar to your synchronous code, and you can migrate your existing synchronous code to asynchronous code easily.

  • Użyj metod asynchronicznych w aplikacjach, w których występuje duże opóźnienie strumienia sieciowego.Use the asynchronous methods in apps where there is significant network stream latency. Unikaj używania asynchronicznych interfejsów API dla strumienia pamięci lub operacji odczytu/zapisu strumienia pliku lokalnego.Avoid using the asynchronous APIs for memory stream or local file stream read/write operations. Strumień wejściowy, XmlTextReaderi XmlTextWriter powinny obsługiwać asynchroniczne operacje.The input stream, XmlTextReader, and XmlTextWriter should support asynchronous operations as well. W przeciwnym razie wątki nadal będą blokowane przez operacje we/wy.Otherwise, threads will still be blocked by I/O operations.

  • Nie zalecamy mieszania wywołań funkcji synchronicznych i asynchronicznych, ponieważ może być zapomniane użycie słowa kluczowego await lub użycie synchronicznego interfejsu API, gdzie jest potrzebny asynchroniczny.We don't recommend mixing synchronous and asynchronous function calls, because you might forget to use the await keyword or use a synchronous API where an asynchronous one is necessary.

  • Nie ustawiaj flagi XmlReaderSettings.Async ani XmlWriterSettings.Async na true, jeśli nie zamierzasz używać metody asynchronicznej.Do not set the XmlReaderSettings.Async or XmlWriterSettings.Async flag to true if you don't intend to use an asynchronous method.

  • Jeśli zapomnisz określić słowo kluczowe await podczas wywoływania metody asynchronicznej, wyniki są niedeterministyczne: może pojawić się oczekiwany wynik lub wyjątek.If you forget to specify the await keyword when you call an asynchronous method, the results are non-deterministic: You might receive the result you expected or an exception.

  • Gdy obiekt XmlReader odczytuje duży węzeł tekstowy, może buforować tylko częściową wartość tekstową i zwracać węzeł tekstowy, więc pobranie właściwości XmlReader.Value może być blokowane przez operację we/wy.When an XmlReader object is reading a large text node, it might cache only a partial text value and return the text node, so retrieving the XmlReader.Value property might be blocked by an I/O operation. Użyj metody XmlReader.GetValueAsync, aby uzyskać wartość tekstową w trybie asynchronicznym, lub użyj metody XmlReader.ReadValueChunkAsync, aby odczytać duży blok tekstowy w fragmentach.Use the XmlReader.GetValueAsync method to get the text value in asynchronous mode, or use the XmlReader.ReadValueChunkAsync method to read a large text block in chunks.

  • Jeśli używasz obiektu XmlWriter, wywołaj metodę XmlWriter.FlushAsync przed wywołaniem XmlWriter.Close, aby uniknąć zablokowania operacji we/wy.When you use an XmlWriter object, call the XmlWriter.FlushAsync method before calling XmlWriter.Close to avoid blocking an I/O operation.

Różnice dotyczące specyfikacji W3CDifferences from the W3C specs

W dwóch przypadkach, które obejmują ograniczenia dotyczące składników schematu grupy modelu, przestrzeń nazw System.Xml różni się od zaleceń dotyczących W3C.In two cases that involve constraints on model group schema components, the System.Xml namespace differs from the W3C recommendations.

Spójność w deklaracjach elementów:Consistency in element declarations:

W niektórych przypadkach, gdy używane są grupy podstawiania, implementacja System.Xml nie spełnia warunków "ograniczenie składnika schematu: deklaracji elementów spójnych", co zostało opisane w sekcji ograniczenia dotyczące składników schematu grupy modelu w specyfikacji W3C.In some cases, when substitution groups are used, the System.Xml implementation does not satisfy the "Schema Component Constraint: Element Declarations Consistent," which is described in the Constraints on Model Group Schema Components section of the W3C spec.

Na przykład poniższy schemat zawiera elementy mające taką samą nazwę, ale różne typy w tym samym modelu zawartości, a także używane są grupy podstawiania.For example, the following schema includes elements that have the same name but different types in the same content model, and substitution groups are used. Powinno to spowodować błąd, ale System.Xml kompiluje i sprawdza poprawność schematu bez błędów.This should cause an error, but System.Xml compiles and validates the schema without errors.

<?xml version="1.0" encoding="utf-8" ?>   
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">  
  
   <xs:element name="e1" type="t1"/>  
   <xs:complexType name="t1"/>  
  
   <xs:element name="e2" type="t2" substitutionGroup="e1"/>  
      <xs:complexType name="t2">  
         <xs:complexContent>  
            <xs:extension base="t1">  
         </xs:extension>  
      </xs:complexContent>  
   </xs:complexType>  
  
   <xs:complexType name="t3">  
      <xs:sequence>  
         <xs:element ref="e1"/>  
         <xs:element name="e2" type="xs:int"/>  
      </xs:sequence>  
   </xs:complexType>  
</xs:schema>  

W tym schemacie wpisz t3 zawiera sekwencję elementów.In this schema, type t3 contains a sequence of elements. Ze względu na podstawienie, odwołanie do elementu e1 z sekwencji może wynikać w e1 elementu typu t1 lub w elemencie e2 typu t2.Because of the substitution, the reference to element e1 from the sequence can result either in element e1 of type t1 or in element e2 of type t2. Ten ostatni przypadek spowoduje sekwencję dwóch e2 elementów, gdzie jeden jest typu t2 a drugi jest typu xs:int.The latter case would result in a sequence of two e2 elements, where one is of type t2 and the other is of type xs:int.

Unikatowa przypisana cząstka:Unique particle attribution:

W następujących warunkach implementacja System.Xml nie spełnia "ograniczenia składnika schematu: unikatowych przypisywania cząsteczek", które opisano w sekcji ograniczenia dotyczące składników schematu grupy modelu w specyfikacji W3C.Under the following conditions, the System.Xml implementation does not satisfy the "Schema Component Constraint: Unique Particle Attribution," which is described in the Constraints on Model Group Schema Components section of the W3C spec.

  • Jeden z elementów w grupie odwołuje się do innego elementu.One of the elements in the group references another element.

  • Element, do którego istnieje odwołanie, jest elementem nagłówkowym grupy podstawienia.The referenced element is a head element of a substitution group.

  • Grupa podstawienia zawiera element, który ma taką samą nazwę jak jeden z elementów w grupie.The substitution group contains an element that has the same name as one of the elements in the group.

  • Kardynalność elementu odwołującego się do elementu nagłówkowego grupy podstawienia i elementu o takiej samej nazwie jak element grupy podstawienia nie jest ustalona (minOccurs < maxOccurs).The cardinality of the element that references the substitution group head element and the element with the same name as a substitution group element is not fixed (minOccurs < maxOccurs).

  • Definicja elementu, który odwołuje się do grupy podstawienia, poprzedza definicję elementu o takiej samej nazwie jak element grupy podstawienia.The definition of the element that references the substitution group precedes the definition of the element with the same name as a substitution group element.

Na przykład w schemacie pod modelem zawartości jest niejednoznaczny i powinien spowodować błąd kompilacji, ale System.Xml kompiluje schemat bez błędów.For example, in the schema below the content model is ambiguous and should cause a compilation error, but System.Xml compiles the schema without errors.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">  
  
  <xs:element name="e1" type="xs:int"/>  
  <xs:element name="e2" type="xs:int" substitutionGroup="e1"/>  
  
  <xs:complexType name="t3">  
    <xs:sequence>  
      <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>  
      <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>  
    </xs:sequence>  
  </xs:complexType>  
  
  <xs:element name="e3" type="t3"/>  
</xs:schema>  

W przypadku próby zweryfikowania poniższego kodu XML względem schematu powyżej sprawdzanie poprawności zakończy się niepowodzeniem z następującym komunikatem: "element" E3 "ma nieprawidłowy element podrzędny" E2 "." i zostanie wygenerowany wyjątek XmlSchemaValidationException.If you try to validate the following XML against the schema above, the validation will fail with the following message: "The element 'e3' has invalid child element 'e2'." and an XmlSchemaValidationException exception will be thrown.

<e3>  
  <e2>1</e2>  
  <e2>2</e2>  
</e3>  

Aby obejść ten problem, można zamienić deklaracje elementu w dokumencie XSD.To work around this problem, you can swap element declarations in the XSD document. Na przykład:For example:

<xs:sequence>  
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>  
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>  
</xs:sequence>  

zostanie to:becomes this:

<xs:sequence>  
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>  
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>  
</xs:sequence>  

Oto inny przykład tego samego problemu:Here's another example of the same issue:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">  
   <xs:element name="e1" type="xs:string"/>  
   <xs:element name="e2" type="xs:string" substitutionGroup="e1"/>  
  
   <xs:complexType name="t3">  
      <xs:sequence>  
         <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>  
         <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>  
      </xs:sequence>  
   </xs:complexType>  
   <xs:element name="e3" type="t3"/>  
</xs:schema>  

Jeśli spróbujesz zweryfikować Poniższy kod XML względem schematu powyżej, sprawdzanie poprawności zakończy się niepowodzeniem z powodu następującego wyjątku: "nieobsługiwany wyjątek: System. XML. Schema. XmlSchemaValidationException —: element" E2 "El jest nieprawidłowy — wartość" ABC "jest nieprawidłowa przy uwzględnieniu jej typu danych 'http://www.w3.org/2001/XMLSchema:int'-ciąg" ABC "nie jest prawidłową wartością Int32."If you try to validate the following XML against the schema above, the validation will fail with the following exception: "Unhandled Exception: System.Xml.Schema.XmlSchemaValidationException: The 'e2' el element is invalid - The value 'abc' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:int' - The string 'abc' is not a valid Int32 value."

<e3><e2>abc</e2></e3>  

Zagadnienia związane z zabezpieczeniamiSecurity considerations

Typy i elementy członkowskie w przestrzeni nazw System.Xml korzystają z systemu zabezpieczeń .NET.The types and members in the System.Xml namespace rely on the .NET security system. W poniższych sekcjach omówiono problemy z zabezpieczeniami, które są specyficzne dla technologii XML.The following sections discuss security issues that are specific to XML technologies.

Należy również pamiętać, że w przypadku używania System.Xml typów i elementów członkowskich, jeśli XML zawiera dane, które mają potencjalne konsekwencje dla prywatności, należy wdrożyć aplikację w taki sposób, że poufność użytkowników końcowych.Also note that when you use the System.Xml types and members, if the XML contains data that has potential privacy implications, you need to implement your app in a way that respects your end users' privacy.

Dostęp zewnętrznyExternal access

Kilka technologii XML umożliwia pobieranie innych dokumentów podczas przetwarzania.Several XML technologies have the ability to retrieve other documents during processing. Na przykład definicja typu dokumentu (DTD) może znajdować się w analizowanym dokumencie.For example, a document type definition (DTD) can reside in the document being parsed. DTD może również znajdować się w dokumencie zewnętrznym, do którego odwołuje się analizowany dokument.The DTD can also live in an external document that is referenced by the document being parsed. Język definicji schematu XML (XSD) i technologia XSLT mogą również zawierać informacje z innych plików.The XML Schema definition language (XSD) and XSLT technologies also have the ability to include information from other files. Te zasoby zewnętrzne mogą stwarzać pewne problemy z bezpieczeństwem.These external resources can present some security concerns. Możesz na przykład upewnić się, że aplikacja pobiera pliki tylko z zaufanych witryn i że pobierany plik nie zawiera złośliwych danych.For example, you'll want to ensure that your app retrieves files only from trusted sites, and that the file it retrieves doesn't contain malicious data.

Klasa XmlUrlResolver jest używana do ładowania dokumentów XML i rozpoznawania zasobów zewnętrznych, takich jak jednostki, definicje DTD lub schematy, a także do importowania lub dołączania dyrektyw.The XmlUrlResolver class is used to load XML documents and to resolve external resources such as entities, DTDs, or schemas, and import or include directives.

Można zastąpić tę klasę i określić obiekt XmlResolver, który ma być używany.You can override this class and specify the XmlResolver object to use. Użyj klasy XmlSecureResolver, jeśli konieczne jest otwarcie zasobu, który nie jest kontrolowany lub że nie jest zaufany.Use the XmlSecureResolver class if you need to open a resource that you do not control, or that is untrusted. XmlSecureResolver zawija XmlResolver i umożliwia ograniczenie zasobów, do których XmlResolver ma dostęp.The XmlSecureResolver wraps an XmlResolver and allows you to restrict the resources that the underlying XmlResolver has access to.

Odmowa usługiDenial of service

Następujące scenariusze są uważane za mniej podatne na ataki typu "odmowa usługi", ponieważ klasy System.Xml zapewniają ochronę przed takimi atakami.The following scenarios are considered to be less vulnerable to denial of service attacks because the System.Xml classes provide a means of protection from such attacks.

  • Analizowanie danych XML tekstu.Parsing text XML data.

  • Analizowanie danych binarnych XML, jeśli dane binarne XML zostały wygenerowane przez Microsoft SQL Server.Parsing binary XML data if the binary XML data was generated by Microsoft SQL Server.

  • Pisanie dokumentów i fragmentów XML ze źródeł danych do systemu plików, strumieni, TextWriterlub StringBuilder.Writing XML documents and fragments from data sources to the file system, streams, a TextWriter, or a StringBuilder.

  • Ładowanie dokumentów do obiektu Document Object Model (DOM), jeśli używasz obiektu XmlReader i XmlReaderSettings.DtdProcessing ustawione na DtdProcessing.Prohibit.Loading documents into the Document Object Model (DOM) object if you are using an XmlReader object and XmlReaderSettings.DtdProcessing set to DtdProcessing.Prohibit.

  • Nawigowanie po obiekcie DOM.Navigating the DOM object.

Poniższe scenariusze nie są zalecane, jeśli chodzi o ataki typu "odmowa usługi" lub jeśli pracujesz w niezaufanym środowisku.The following scenarios are not recommended if you are concerned about denial of service attacks, or if you are working in an untrusted environment.

  • Przetwarzanie DTD.DTD processing.

  • Przetwarzanie schematu.Schema processing. Obejmuje to dodawanie niezaufanego schematu do kolekcji schematów, kompilowanie niezaufanego schematu i sprawdzanie poprawności przy użyciu niezaufanego schematu.This includes adding an untrusted schema to the schema collection, compiling an untrusted schema, and validating by using an untrusted schema.

  • Przetwarzanie XSLT.XSLT processing.

  • Analizowanie dowolnego dowolnego strumienia danych XML w postaci binarnej.Parsing any arbitrary stream of user supplied binary XML data.

  • Operacje związane z modelem DOM, takie jak wykonywanie zapytań, edytowanie, przesuwanie drzew podrzędnych między dokumentami i zapisywanie obiektów DOM.DOM operations such as querying, editing, moving sub-trees between documents, and saving DOM objects.

Jeśli chodzi o problemy związane z odmową usługi lub w przypadku postępowania z niezaufanymi źródłami, nie należy włączać przetwarzania DTD.If you are concerned about denial of service issues or if you are dealing with untrusted sources, do not enable DTD processing. Ta wartość jest domyślnie wyłączona dla XmlReader obiektów tworzonych przez metodę XmlReader.Create.This is disabled by default on XmlReader objects that the XmlReader.Create method creates.

Uwaga

XmlTextReader domyślnie zezwala na przetwarzanie DTD.The XmlTextReader allows DTD processing by default. Użyj właściwości XmlTextReader.DtdProcessing, aby wyłączyć tę funkcję.Use the XmlTextReader.DtdProcessing property to disable this feature.

Jeśli jest włączone przetwarzanie DTD, można użyć klasy XmlSecureResolver, aby ograniczyć zasoby, do których XmlReader może uzyskać dostęp.If you have DTD processing enabled, you can use the XmlSecureResolver class to restrict the resources that the XmlReader can access. Możesz również projektować aplikację, tak aby przetwarzanie XML było ograniczone do pamięci i czasu.You can also design your app so that the XML processing is memory and time constrained. Można na przykład skonfigurować limity limitu czasu w aplikacji ASP.NET.For example, you can configure timeout limits in your ASP.NET app.

Zagadnienia dotyczące przetwarzaniaProcessing considerations

Ponieważ dokumenty XML mogą zawierać odwołania do innych plików, trudno jest określić, ile mocy przetwarzania jest wymagane do analizy dokumentu XML.Because XML documents can include references to other files, it is difficult to determine how much processing power is required to parse an XML document. Na przykład dokumenty XML mogą zawierać DTD.For example, XML documents can include a DTD. Jeśli DTD zawiera zagnieżdżone jednostki lub złożone modele zawartości, przeanalizowanie dokumentu może zająć zbyt dużo czasu.If the DTD contains nested entities or complex content models, it could take an excessive amount of time to parse the document.

Przy użyciu XmlReadermożna ograniczyć rozmiar dokumentu, który może być analizowany przez ustawienie właściwości XmlReaderSettings.MaxCharactersInDocument.When using XmlReader, you can limit the size of the document that can be parsed by setting the XmlReaderSettings.MaxCharactersInDocument property. Można ograniczyć liczbę znaków, które powodują powiększanie jednostek przez ustawienie właściwości XmlReaderSettings.MaxCharactersFromEntities.You can limit the number of characters that result from expanding entities by setting the XmlReaderSettings.MaxCharactersFromEntities property. Zobacz odpowiednie tematy referencyjne dotyczące przykładów konfigurowania tych właściwości.See the appropriate reference topics for examples of setting these properties.

Technologie XSD i XSLT mają dodatkowe możliwości, które mogą wpływać na wydajność przetwarzania.The XSD and XSLT technologies have additional capabilities that can affect processing performance. Na przykład można skonstruować schemat XML, który wymaga długiego czasu, aby przetwarzać dane w stosunkowo małym dokumencie.For example, it is possible to construct an XML schema that requires a substantial amount of time to process when evaluated over a relatively small document. Istnieje również możliwość osadzenia bloków skryptów w arkuszu stylów XSLT.It is also possible to embed script blocks within an XSLT style sheet. Oba przypadki stanowią potencjalne zagrożenie dla bezpieczeństwa aplikacji.Both cases pose a potential security threat to your app.

Podczas tworzenia aplikacji korzystającej z klasy XslCompiledTransform należy pamiętać o następujących elementach i ich implikacjach:When creating an app that uses the XslCompiledTransform class, you should be aware of the following items and their implications:

  • Obsługa skryptów XSLT jest domyślnie wyłączona.XSLT scripting is disabled by default. Obsługa skryptów XSLT powinna być włączona tylko wtedy, gdy wymagana jest obsługa skryptów i Pracujesz w w pełni zaufanym środowisku.XSLT scripting should be enabled only if you require script support and you are working in a fully trusted environment.

  • Funkcja document() XSLT jest domyślnie wyłączona.The XSLT document() function is disabled by default. Jeśli włączysz funkcję document(), Ogranicz zasoby, do których można uzyskać dostęp, przekazując obiekt XmlSecureResolver do metody XslCompiledTransform.Transform.If you enable the document() function, restrict the resources that can be accessed by passing an XmlSecureResolver object to the XslCompiledTransform.Transform method.

  • Obiekty rozszerzeń są domyślnie włączone.Extension objects are enabled by default. Jeśli obiekt XsltArgumentList zawierający obiekty rozszerzeń jest przenoszona do metody XslCompiledTransform.Transform, zostaną użyte obiekty rozszerzeń.If an XsltArgumentList object that contains extension objects is passed to the XslCompiledTransform.Transform method, the extension objects are used.

  • Arkusze stylów XSLT mogą zawierać odwołania do innych plików i osadzonych bloków skryptów.XSLT style sheets can include references to other files and embedded script blocks. Złośliwy użytkownik może wykorzystać ten element, dostarczając dane lub arkusze stylów, które po wykonaniu mogą spowodować, że system będzie przetwarzać do momentu, gdy komputer nie będzie miał niskiego poziomu zasobów.A malicious user can exploit this by supplying you with data or style sheets that, when executed, can cause your system to process until the computer runs low on resources.

  • Aplikacje XSLT działające w środowisku mieszanym zaufania mogą spowodować fałszowanie arkusza stylów.XSLT apps that run in a mixed trust environment can result in style sheet spoofing. Na przykład złośliwy użytkownik może załadować obiekt z bezpiecznym arkuszem stylów i pocofać go innemu użytkownikowi, który następnie wywołuje metodę XslCompiledTransform.Transform i wykonuje transformację.For example, a malicious user can load an object with a harmful style sheet and hand it off to another user who subsequently calls the XslCompiledTransform.Transform method and executes the transformation.

Te problemy z zabezpieczeniami można ograniczyć, nie włączając skryptów ani funkcji document(), chyba że arkusz stylów pochodzi z zaufanego źródła i nie akceptuje obiektów XslCompiledTransform, arkuszy stylów XSLT ani danych źródłowych XML z niezaufanego źródła.These security issues can be mitigated by not enabling scripting or the document() function unless the style sheet comes from a trusted source, and by not accepting XslCompiledTransform objects, XSLT style sheets, or XML source data from an untrusted source.

Obsługa wyjątkówException handling

Wyjątki zgłoszone przez składniki niższego poziomu mogą ujawniać informacje o ścieżce, które nie powinny być udostępniane aplikacji.Exceptions thrown by lower level components can disclose path information that you do not want exposed to the app. Aplikacje muszą przechwytywać wyjątki i przetwarzać je odpowiednio.Your apps must catch exceptions and process them appropriately.

Zobacz też