Extensions.GetSchemaInfo Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Obtém o conjunto de informações pós-validação do esquema (PSVI) de um nó validado.
Sobrecargas
| Name | Description |
|---|---|
| GetSchemaInfo(XAttribute) |
Obtém o conjunto de infos pós-validação do esquema (PSVI) de um atributo validado. |
| GetSchemaInfo(XElement) |
Obtém o conjunto de infos pós-validação do esquema (PSVI) de um elemento validado. |
Observações
Depois de validar um XDocument, pode recuperar o conjunto de informações pós-validação do esquema para um XElement ou XAttribute que está contido no documento.
Depois de recuperar o IXmlSchemaInfo objeto, pode usar as SchemaAttribute propriedades ou SchemaElement para obter um tipo de validação parcial (XmlSchemaElement ou XmlSchemaAttribute). Pode usar os tipos de validação parcial para validar um atributo ou uma subárvore.
GetSchemaInfo(XAttribute)
- Origem:
- XNodeValidator.cs
- Origem:
- XNodeValidator.cs
- Origem:
- XNodeValidator.cs
- Origem:
- XNodeValidator.cs
- Origem:
- XNodeValidator.cs
Obtém o conjunto de infos pós-validação do esquema (PSVI) de um atributo validado.
public:
[System::Runtime::CompilerServices::Extension]
static System::Xml::Schema::IXmlSchemaInfo ^ GetSchemaInfo(System::Xml::Linq::XAttribute ^ source);
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);
static member GetSchemaInfo : System.Xml.Linq.XAttribute -> System.Xml.Schema.IXmlSchemaInfo
<Extension()>
Public Function GetSchemaInfo (source As XAttribute) As IXmlSchemaInfo
Parâmetros
- source
- XAttribute
E XAttribute isso já foi validado anteriormente.
Devoluções
A IXmlSchemaInfo que contém o conjunto de infos pós-validação do esquema para um XAttribute.
Observações
Pode usar o IXmlSchemaInfo retorno por este método para determinar certas características de um atributo validado. Por exemplo, pode determinar se o atributo veio de um valor de atributo padrão num XSD.
Utiliza-se a SchemaAttribute propriedade para obter um tipo de validação parcial (XmlSchemaAttribute). Podes usá-lo para revalidar um atributo sem validar um documento inteiro.
Para um exemplo desta propriedade, veja Validate.
Aplica-se a
GetSchemaInfo(XElement)
- Origem:
- XNodeValidator.cs
- Origem:
- XNodeValidator.cs
- Origem:
- XNodeValidator.cs
- Origem:
- XNodeValidator.cs
- Origem:
- XNodeValidator.cs
Obtém o conjunto de infos pós-validação do esquema (PSVI) de um elemento validado.
public:
[System::Runtime::CompilerServices::Extension]
static System::Xml::Schema::IXmlSchemaInfo ^ GetSchemaInfo(System::Xml::Linq::XElement ^ source);
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);
static member GetSchemaInfo : System.Xml.Linq.XElement -> System.Xml.Schema.IXmlSchemaInfo
<Extension()>
Public Function GetSchemaInfo (source As XElement) As IXmlSchemaInfo
Parâmetros
Devoluções
A IXmlSchemaInfo que contém o conjunto de infos pós-validação do esquema (PSVI) para um XElement.
Exemplos
O exemplo seguinte preenche a árvore com um PSVI. Após validação, imprime todos os elementos e atributos na árvore que são inválidos segundo o 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);
}
Private Sub DumpInvalidNodes(ByVal el As XElement)
If el.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then
Console.WriteLine("Invalid Element {0}", _
el _
.AncestorsAndSelf _
.InDocumentOrder() _
.Aggregate("", _
Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()))
End If
For Each att As XAttribute In el.Attributes()
If att.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then
Console.WriteLine("Invalid Attribute {0}", _
att _
.Parent _
.AncestorsAndSelf() _
.InDocumentOrder() _
.Aggregate("", _
Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()) + _
"/@" + att.Name.ToString())
End If
Next
For Each child As XElement In el.Elements()
DumpInvalidNodes(child)
Next
End Sub
Dim errors As Boolean = False
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)
Console.WriteLine("{0}", e.Message)
errors = True
End Sub
Sub Main()
Dim xsdMarkup As XDocument = _
<?xml version='1.0'?>
<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>
Dim schemas As XmlSchemaSet = New XmlSchemaSet()
schemas.Add("", xsdMarkup.CreateReader)
Dim doc1 As XDocument = _
<?xml version='1.0'?>
<Root>
<Child1>
<GrandChild1>AAA</GrandChild1>
<GrandChild2>ZZZ</GrandChild2>
<GrandChild3>ZZZ</GrandChild3>
</Child1>
</Root>
Console.WriteLine("Validating doc1 ...")
errors = False
doc1.Validate(schemas, AddressOf XSDErrors, True)
Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))
DumpInvalidNodes(doc1.Root)
End Sub
Este exemplo produz a seguinte saída:
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
Observações
Pode usar o retorno IXmlSchemaInfo por este método para determinar certas características de um elemento validado. Por exemplo, pode determinar o tipo de esquema dinâmico do elemento.
Utiliza-se a SchemaElement propriedade para obter um tipo de validação parcial (XmlSchemaElement). Pode usá-lo para revalidar uma subárvore com um elemento na raiz sem validar um documento inteiro.
Para um exemplo desta propriedade, veja Validate.