internal override void ProcessAttribute(string prefix, string name, string ns, string value)
{
XmlQualifiedName qname = new XmlQualifiedName(name, XmlSchemaDatatype.XdrCanonizeUri(ns, _NameTable, _SchemaNames));
for (int i = 0; i < _CurState._Attributes.Length; i++)
{
XdrAttributeEntry a = _CurState._Attributes[i];
if (_SchemaNames.TokenToQName[(int)a._Attribute].Equals(qname))
{
XdrBuildFunction buildFunc = a._BuildFunc;
if (a._Datatype.TokenizedType == XmlTokenizedType.QName)
{
string prefixValue;
XmlQualifiedName qnameValue = XmlQualifiedName.Parse(value, _CurNsMgr, out prefixValue);
qnameValue.Atomize(_NameTable);
if (prefixValue.Length != 0)
{
if (a._Attribute != SchemaNames.Token.SchemaType)
{ // <attribute type= || <element type=
throw new XmlException(SR.Xml_UnexpectedToken, "NAME");
}
}
else if (IsGlobal(a._SchemaFlags))
{
qnameValue = new XmlQualifiedName(qnameValue.Name, _TargetNamespace);
}
else
{
qnameValue = new XmlQualifiedName(qnameValue.Name);
}
buildFunc(this, qnameValue, prefixValue);
}
else
{
buildFunc(this, a._Datatype.ParseValue(value, _NameTable, _CurNsMgr), string.Empty);
}
return;
}
}
if ((object)ns == (object)_SchemaNames.NsXmlNs && IsXdrSchema(value))
{
LoadSchema(value);
return;
}
// Check non-supported attribute
if (!IsSkipableAttribute(qname))
{
SendValidationEvent(SR.Sch_UnsupportedAttribute,
XmlQualifiedName.ToString(qname.Name, prefix));
}
}