Прочитать на английском

Поделиться через


Extensions.GetSchemaInfo Метод

Определение

Важно!

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Получает набор сведений после проверки схемы (PSVI) для проверенного узла XML.

Перегрузки

GetSchemaInfo(XAttribute)

Получает набор сведений после проверки схемы (PSVI) для проверенного атрибута.

GetSchemaInfo(XElement)

Получает набор сведений после проверки схемы (PSVI) для проверенного элемента.

Комментарии

После проверки можно получить набор сведений XDocumentпосле проверки схемы для XElement или XAttribute , который содержится в документе.

После получения IXmlSchemaInfo объекта можно использовать SchemaAttribute свойства или SchemaElement , чтобы получить тип частичной проверки (XmlSchemaElement или XmlSchemaAttribute). Для проверки атрибута или вложенного дерева можно использовать типы частичной проверки.

GetSchemaInfo(XAttribute)

Исходный код:
XNodeValidator.cs
Исходный код:
XNodeValidator.cs
Исходный код:
XNodeValidator.cs

Получает набор сведений после проверки схемы (PSVI) для проверенного атрибута.

public static System.Xml.Schema.IXmlSchemaInfo? GetSchemaInfo(this System.Xml.Linq.XAttribute source);
public static System.Xml.Schema.IXmlSchemaInfo GetSchemaInfo(this System.Xml.Linq.XAttribute source);

Параметры

source
XAttribute

Ранее проверенный XAttribute.

Возвращаемое значение

IXmlSchemaInfo, содержащий набор сведений после проверки схемы для XAttribute.

Комментарии

Вы можете использовать объект , IXmlSchemaInfo возвращаемый этим методом, для определения определенных характеристик проверенного атрибута. Например, можно определить, получен ли атрибут из значения атрибута по умолчанию в XSD.

Свойство используется SchemaAttribute для получения типа частичной проверки (XmlSchemaAttribute). Его можно использовать для повторной проверки атрибута без проверки всего документа.

Пример этого свойства см. в разделе Validate.

Применяется к

.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 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

GetSchemaInfo(XElement)

Исходный код:
XNodeValidator.cs
Исходный код:
XNodeValidator.cs
Исходный код:
XNodeValidator.cs

Получает набор сведений после проверки схемы (PSVI) для проверенного элемента.

public static System.Xml.Schema.IXmlSchemaInfo? GetSchemaInfo(this System.Xml.Linq.XElement source);
public static System.Xml.Schema.IXmlSchemaInfo GetSchemaInfo(this System.Xml.Linq.XElement source);

Параметры

source
XElement

Ранее проверенный XElement.

Возвращаемое значение

IXmlSchemaInfo, содержащий набор сведений после проверки схемы для XElement.

Примеры

В следующем примере дерево заполняется PSVI. После проверки он выводит все элементы и атрибуты в дереве, которые являются недопустимыми в соответствии с PSVI.

                static void DumpInvalidNodes(XElement el)  
{  
    if (el.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
        Console.WriteLine("Invalid Element {0}",  
            el.AncestorsAndSelf()  
            .InDocumentOrder()  
            .Aggregate("", (s, i) => s + "/" + i.Name.ToString()));  
    foreach (XAttribute att in el.Attributes())  
        if (att.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
            Console.WriteLine("Invalid Attribute {0}",  
                att  
                .Parent  
                .AncestorsAndSelf()  
                .InDocumentOrder()  
                .Aggregate("",  
                    (s, i) => s + "/" + i.Name.ToString()) + "/@" + att.Name.ToString()  
                );  
    foreach (XElement child in el.Elements())  
        DumpInvalidNodes(child);  
}  

static void Main(string[] args)  
{  
    string xsdMarkup =  
         @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
   <xsd:simpleType name='GCType'>  
    <xsd:restriction base='xsd:token'>  
     <xsd:enumeration value='AAA'/>  
     <xsd:enumeration value='BBB'/>  
    </xsd:restriction>  
   </xsd:simpleType>  
   <xsd:element name='Root'>  
    <xsd:complexType>  
     <xsd:sequence>  
      <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
       <xsd:complexType>  
        <xsd:sequence>  
         <xsd:element name='GrandChild1' type='GCType'/>  
         <xsd:element name='GrandChild2' type='GCType'/>  
         <xsd:element name='GrandChild3' type='GCType'/>  
        </xsd:sequence>  
       </xsd:complexType>  
      </xsd:element>  
     </xsd:sequence>  
    </xsd:complexType>  
   </xsd:element>  
  </xsd:schema>";  

    XmlSchemaSet schemas = new XmlSchemaSet();  
    schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  

    XDocument doc1 = new XDocument(  
        new XElement("Root",  
            new XElement("Child1",  
                new XElement("GrandChild1", "AAA"),  
                new XElement("GrandChild2", "ZZZ"),  
                new XElement("GrandChild3", "ZZZ")  
            )  
        )  
    );  

    Console.WriteLine("Validating doc1 ...");  
    bool errors = false;  
    doc1.Validate(schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
    Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  
}  

В этом примере выводятся следующие данные:

Validating doc1 ...  
The 'GrandChild2' element is invalid - The value 'ZZZ' is invalid according to its datatype 'GCType' - The Enumeration constraint failed.  
The 'GrandChild3' element is invalid - The value 'ZZZ' is invalid according to its datatype 'GCType' - The Enumeration constraint failed.  
doc1 did not validate  
Invalid Element /Root  
Invalid Element /Root/Child1  
Invalid Element /Root/Child1/GrandChild2  
Invalid Element /Root/Child1/GrandChild3  

Комментарии

Возвращаемый этим методом объект можно использовать IXmlSchemaInfo для определения определенных характеристик проверяемого элемента. Например, можно определить тип динамической схемы элемента .

Свойство используется SchemaElement для получения типа частичной проверки (XmlSchemaElement). Его можно использовать для повторной проверки вложенного дерева с элементом в корне без проверки всего документа.

Пример этого свойства см. в разделе Validate.

Применяется к

.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 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