Прочетете на английски Редактиране

Споделяне чрез


XmlValidatingReader Constructors

Definition

Initializes a new instance of the XmlValidatingReader class.

Overloads

XmlValidatingReader(XmlReader)

Initializes a new instance of the XmlValidatingReader class that validates the content returned from the given XmlReader.

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Initializes a new instance of the XmlValidatingReader class with the specified values.

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Initializes a new instance of the XmlValidatingReader class with the specified values.

XmlValidatingReader(XmlReader)

Source:
XmlValidatingReader.cs
Source:
XmlValidatingReader.cs
Source:
XmlValidatingReader.cs

Initializes a new instance of the XmlValidatingReader class that validates the content returned from the given XmlReader.

C#
public XmlValidatingReader(System.Xml.XmlReader reader);

Parameters

reader
XmlReader

The XmlReader to read from while validating. The current implementation supports only XmlTextReader.

Exceptions

The reader specified is not an XmlTextReader.

Examples

The following example validates two documents.

C#
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

public class Sample
{

  private Boolean m_success = true;

  public Sample ()
  {
      //Validate the document using an external XSD schema.  Validation should fail.
      Validate("notValidXSD.xml");

      //Validate the document using an inline XSD. Validation should succeed.
      Validate("inlineXSD.xml");
  }

  public static void Main ()
  {
      Sample validation = new Sample();
  }

  private void Validate(String filename)
  {
      m_success = true;
      Console.WriteLine("\r\n******");
      Console.WriteLine("Validating XML file " + filename.ToString());
      XmlTextReader txtreader = new XmlTextReader (filename);
      XmlValidatingReader reader = new XmlValidatingReader (txtreader);

      // Set the validation event handler
      reader.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);

      // Read XML data
      while (reader.Read()){}
      Console.WriteLine ("Validation finished. Validation {0}", (m_success==true ? "successful!" : "failed."));

      //Close the reader.
      reader.Close();
  }

  //Display the validation error.
  private void ValidationCallBack (object sender, ValidationEventArgs args)
  {
     m_success = false;
     Console.WriteLine("\r\n\tValidation error: " + args.Message );
  }
}

The sample uses the following input files:

notValidXSD.xml

XML
<?xml version='1.0'?>
<bookstore xmlns="urn:bookstore-schema"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="urn:bookstore-schema books.xsd">
  <book>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
  </book>
  <book genre="novel">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
</bookstore>

books.xsd

XML
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="urn:bookstore-schema"
    elementFormDefault="qualified"
    targetNamespace="urn:bookstore-schema">

 <xsd:element name="bookstore" type="bookstoreType"/>

 <xsd:complexType name="bookstoreType">
  <xsd:sequence maxOccurs="unbounded">
   <xsd:element name="book"  type="bookType"/>
  </xsd:sequence>
 </xsd:complexType>

 <xsd:complexType name="bookType">
  <xsd:sequence>
   <xsd:element name="title" type="xsd:string"/>
   <xsd:element name="author" type="authorName"/>
   <xsd:element name="price"  type="xsd:decimal"/>
  </xsd:sequence>
  <xsd:attribute name="genre" type="xsd:string"/>
 </xsd:complexType>

 <xsd:complexType name="authorName">
  <xsd:sequence>
   <xsd:element name="first-name"  type="xsd:string"/>
   <xsd:element name="last-name" type="xsd:string"/>
  </xsd:sequence>
 </xsd:complexType>

</xsd:schema>

inlineXSD.xml

XML
<store-data>
<!--Inline XSD schema-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <xsd:element name="bookstore" type="bookstoreType"/>
 <xsd:complexType name="bookstoreType">
  <xsd:sequence maxOccurs="unbounded">
   <xsd:element name="book"  type="bookType"/>
  </xsd:sequence>
 </xsd:complexType>

 <xsd:complexType name="bookType">
  <xsd:sequence>
   <xsd:element name="title" type="xsd:string"/>
   <xsd:element name="price"  type="xsd:decimal"/>
  </xsd:sequence>
  <xsd:attribute name="genre" type="xsd:string"/>
 </xsd:complexType>
</xsd:schema>
<!-- end of schema -->

<bookstore>
  <book genre="novel">
    <title>Pride And Prejudice</title>
    <price>19.95</price>
  </book>
</bookstore>
</store-data>

Remarks

Бележка

The XmlValidatingReader class is obsolete in .NET Framework 2.0. You can create a validating XmlReader instance by using the XmlReaderSettings class and the Create method. For more information, see the Remarks section of the XmlReader reference page.

All nodes returned from the given XmlReader are also returned from this validating reader, so there is no information loss in the process. New nodes not returned from the underlying reader may be added by this reader (for example, default attributes and the children of an entity reference). Any properties set on the given XmlTextReader also apply to this validating reader. For example, if the supplied reader had WhitespaceHandling.None set, this validating reader also ignores white space.

When external document type definitions (DTDs) or schemas are needed for validation, the XmlResolver property sets the XmlResolver object to use for resolving external resources.

See also

Applies to

.NET 10 и други версии
Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Source:
XmlValidatingReader.cs
Source:
XmlValidatingReader.cs
Source:
XmlValidatingReader.cs

Initializes a new instance of the XmlValidatingReader class with the specified values.

C#
public XmlValidatingReader(System.IO.Stream xmlFragment, System.Xml.XmlNodeType fragType, System.Xml.XmlParserContext context);

Parameters

xmlFragment
Stream

The stream containing the XML fragment to parse.

fragType
XmlNodeType

The XmlNodeType of the XML fragment. This determines what the fragment can contain (see table below).

context
XmlParserContext

The XmlParserContext in which the XML fragment is to be parsed. This includes the XmlNameTable to use, encoding, namespace scope, current xml:lang, and xml:space scope.

Exceptions

fragType is not one of the node types listed in the table below.

Remarks

Бележка

The XmlValidatingReader class is obsolete in .NET Framework 2.0. You can create a validating XmlReader instance by using the XmlReaderSettings class and the Create method. For more information, see the Remarks section of the XmlReader reference page.

This constructor parses the given string as a fragment of XML. If the XML fragment is an element or attribute, you can bypass the root level rules for well-formed XML documents.

The following table lists valid values for fragType and how the reader parses each of the different node types.

XmlNodeType Fragment May Contain
Element Any valid element content (for example, any combination of elements, comments, processing instructions, cdata, text, and entity references).
Attribute The value of an attribute (the part inside the quotes).
Document The contents of an entire XML document; this enforces document level rules.

The reader uses the following steps to determine the encoding of the stream:

  1. Checks the XmlParserContext.Encoding property to determine the encoding.

  2. If the Encoding property is null, the reader checks for a byte-order mark at the beginning of the stream.

  3. If the Encoding property is null, and no byte-order mark is found, the reader assumes the stream is encoded in UTF-8.

If this reader will be validating using document type definition (DTD) (that is, ValidationType is set to ValidationType.DTD or ValidationType.Auto), the XmlParserContext specified in the constructor must supply all the necessary DocumentType information.

Бележка

It is not possible to validate a fragment by using a DTD. By definition a DTD requires an entire document to be loaded for validation.

If this reader will be validating by using XML-Data Reduced (XDR) or XML Schema definition language (XSD) schemas, use the Schemas property to specify the XmlSchemaCollection that contains the schemas (that is, the XmlParserContext does not need to supply the DocumentType information).

See also

Applies to

.NET 10 и други версии
Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Source:
XmlValidatingReader.cs
Source:
XmlValidatingReader.cs
Source:
XmlValidatingReader.cs

Initializes a new instance of the XmlValidatingReader class with the specified values.

C#
public XmlValidatingReader(string xmlFragment, System.Xml.XmlNodeType fragType, System.Xml.XmlParserContext context);

Parameters

xmlFragment
String

The string containing the XML fragment to parse.

fragType
XmlNodeType

The XmlNodeType of the XML fragment. This also determines what the fragment string can contain (see table below).

context
XmlParserContext

The XmlParserContext in which the XML fragment is to be parsed. This includes the NameTable to use, encoding, namespace scope, current xml:lang, and xml:space scope.

Exceptions

fragType is not one of the node types listed in the table below.

Examples

The following example reads an XML fragment. It uses an XmlParserContext and its XmlNamespaceManager to handle namespace matching.

C#
using System;
using System.IO;
using System.Xml;

public class Sample
{
    public static void Main()
    {
        XmlTextReader reader = null;

        try
        {
            //Create the XML fragment to be parsed.
            string xmlFrag = "<book> " +
                            "<title>Pride And Prejudice</title>" +
                            "<bk:genre>novel</bk:genre>" +
                            "</book>";

            //Create the XmlNamespaceManager that is used to
            //look up namespace information.
            NameTable nt = new NameTable();
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
            nsmgr.AddNamespace("bk", "urn:sample");

            //Create the XmlParserContext.
            XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);

            //Implement the reader.
            reader = new XmlTextReader(xmlFrag, XmlNodeType.Element, context);

            //Parse the XML fragment.  If they exist, display the
            //prefix and namespace URI of each element.
            while (reader.Read())
            {
                if (reader.IsStartElement())
                {
                    if (string.IsNullOrEmpty(reader.Prefix))
                    {
                        Console.WriteLine("<{0}>", reader.LocalName);
                    }
                    else
                    {
                        Console.Write("<{0}:{1}>", reader.Prefix, reader.LocalName);
                        Console.WriteLine(" The namespace URI is " + reader.NamespaceURI);
                    }
                }
            }
        }

        finally
        {
            if (reader != null)
                reader.Close();
        }
    }
} // End class

Remarks

Бележка

The XmlValidatingReader class is obsolete in .NET Framework 2.0. You can create a validating XmlReader instance by using the XmlReaderSettings class and the Create method. For more information, see the Remarks section of the XmlReader reference page.

This constructor parses the given string as a fragment of XML. If the XML fragment is an element or attribute, you can bypass the root level rules for well-formed XML documents. This constructor can handle strings returned from ReadInnerXml.

The following table lists valid values for fragType and how the reader parses each of the different node types.

XmlNodeType Fragment May Contain
Element Any valid element content (for example, any combination of elements, comments, processing instructions, cdata, text, and entity references).
Attribute The value of an attribute (the part inside the quotes).
Document The contents of an entire XML document; this enforces document level rules.

If this reader will be validating by using document type definition (DTD) (that is, ValidationType is set to ValidationType.DTD or ValidationType.Auto), the XmlParserContext specified in the constructor must supply all the necessary DocumentType information.

Бележка

It is not possible to validate a fragment by using DTD. By definition DTD requires an entire document to be loaded for validation.

If this reader will be validating by using XML-Data Reduced (XDR) or XML Schema definition language (XSD) schemas, use the Schemas property to specify the XmlSchemaCollection that contains the schemas (the XmlParserContext does not need to supply the DocumentType information).

See also

Applies to

.NET 10 и други версии
Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1