Extensions.GetSchemaInfo Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Hämtar psvi-informationsuppsättningen efter schemavalidering (PSVI) för en verifierad nod.
Överlagringar
| Name | Description |
|---|---|
| GetSchemaInfo(XAttribute) |
Hämtar psvi-informationsuppsättningen (post-schema-validation) för ett validerat attribut. |
| GetSchemaInfo(XElement) |
Hämtar psvi-informationsuppsättningen (post-schema-validation) för ett verifierat element. |
Kommentarer
När du har verifierat en XDocumentkan du hämta infouppsättningen efter schemavalidering för en XElement eller XAttribute som finns i dokumentet.
När du har hämtat IXmlSchemaInfo objektet kan du använda SchemaAttribute egenskaperna eller SchemaElement för att hämta en partiell valideringstyp (XmlSchemaElement eller XmlSchemaAttribute). Du kan använda de partiella valideringstyperna för att verifiera ett attribut eller ett underträd.
GetSchemaInfo(XAttribute)
- Källa:
- XNodeValidator.cs
- Källa:
- XNodeValidator.cs
- Källa:
- XNodeValidator.cs
- Källa:
- XNodeValidator.cs
- Källa:
- XNodeValidator.cs
Hämtar psvi-informationsuppsättningen (post-schema-validation) för ett validerat attribut.
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
Parametrar
- source
- XAttribute
En XAttribute som har verifierats tidigare.
Returer
En IXmlSchemaInfo som innehåller infouppsättningen efter schemavalidering för en XAttribute.
Kommentarer
Du kan använda den IXmlSchemaInfo returnerade metoden för att fastställa vissa egenskaper för ett validerat attribut. Du kan till exempel avgöra om attributet kom från ett standardattributvärde i en XSD.
Du använder egenskapen SchemaAttribute för att hämta en partiell valideringstyp (XmlSchemaAttribute). Du kan använda det för att återskapa ett attribut utan att verifiera ett helt dokument.
Ett exempel på den här egenskapen finns i Validate.
Gäller för
GetSchemaInfo(XElement)
- Källa:
- XNodeValidator.cs
- Källa:
- XNodeValidator.cs
- Källa:
- XNodeValidator.cs
- Källa:
- XNodeValidator.cs
- Källa:
- XNodeValidator.cs
Hämtar psvi-informationsuppsättningen (post-schema-validation) för ett verifierat element.
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
Parametrar
Returer
En IXmlSchemaInfo som innehåller infouppsättningen efter schemavalidering (PSVI) för en XElement.
Exempel
I följande exempel fylls trädet med en PSVI. Efter valideringen skriver den ut alla element och attribut i trädet som är ogiltiga enligt 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
Det här exemplet genererar följande utdata:
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
Kommentarer
Du kan använda den IXmlSchemaInfo returnerade metoden för att fastställa vissa egenskaper för ett verifierat element. Du kan till exempel fastställa elementets dynamiska schematyp.
Du använder egenskapen SchemaElement för att hämta en partiell valideringstyp (XmlSchemaElement). Du kan använda det för att återskapa ett underträd med ett element i roten utan att verifiera ett helt dokument.
Ett exempel på den här egenskapen finns i Validate.