Extensions.GetSchemaInfo Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene l'infoset di convalida dello schema (PSVI) di un nodo convalidato.
Overload
| Nome | Descrizione |
|---|---|
| GetSchemaInfo(XAttribute) |
Ottiene l'infoset post-schema-validation (PSVI) di un attributo convalidato. |
| GetSchemaInfo(XElement) |
Ottiene l'infoset post-schema-validation (PSVI) di un elemento convalidato. |
Commenti
Dopo aver convalidato un oggetto XDocument, è possibile recuperare l'infoset di convalida post-schema per un XElement oggetto o XAttribute contenuto nel documento.
Dopo aver recuperato l'oggetto IXmlSchemaInfo , è possibile usare le SchemaAttribute proprietà o SchemaElement per ottenere un tipo di convalida parziale (XmlSchemaElement o XmlSchemaAttribute). È possibile usare i tipi di convalida parziale per convalidare un attributo o un sottoalbero.
GetSchemaInfo(XAttribute)
- Origine:
- XNodeValidator.cs
- Origine:
- XNodeValidator.cs
- Origine:
- XNodeValidator.cs
- Origine:
- XNodeValidator.cs
- Origine:
- XNodeValidator.cs
Ottiene l'infoset post-schema-validation (PSVI) di un attributo convalidato.
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
Parametri
- source
- XAttribute
Oggetto XAttribute convalidato in precedenza.
Restituisce
Oggetto IXmlSchemaInfo contenente l'infoset di convalida post-schema per un oggetto XAttribute.
Commenti
È possibile utilizzare l'oggetto IXmlSchemaInfo restituito da questo metodo per determinare determinate caratteristiche di un attributo convalidato. Ad esempio, è possibile determinare se l'attributo proviene da un valore di attributo predefinito in un XSD.
Usare la SchemaAttribute proprietà per ottenere un tipo di convalida parziale (XmlSchemaAttribute). È possibile usarlo per riconvalidare un attributo senza convalidare un intero documento.
Per un esempio di questa proprietà, vedere Validate.
Si applica a
GetSchemaInfo(XElement)
- Origine:
- XNodeValidator.cs
- Origine:
- XNodeValidator.cs
- Origine:
- XNodeValidator.cs
- Origine:
- XNodeValidator.cs
- Origine:
- XNodeValidator.cs
Ottiene l'infoset post-schema-validation (PSVI) di un elemento convalidato.
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
Parametri
Restituisce
Oggetto IXmlSchemaInfo contenente l'infoset di convalida post-schema (PSVI) per un oggetto XElement.
Esempio
L'esempio seguente popola l'albero con un PSVI. Dopo la convalida, stampa tutti gli elementi e gli attributi nell'albero non validi in base a 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
In questo esempio viene generato l'output seguente:
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
Commenti
È possibile utilizzare l'oggetto IXmlSchemaInfo restituito da questo metodo per determinare determinate caratteristiche di un elemento convalidato. Ad esempio, è possibile determinare il tipo di schema dinamico dell'elemento .
Usare la SchemaElement proprietà per ottenere un tipo di convalida parziale (XmlSchemaElement). È possibile usarlo per riconvalidare un sottoalbero con un elemento nella radice senza convalidare un intero documento.
Per un esempio di questa proprietà, vedere Validate.