public override bool MoveToAttribute(string name, string ns)
{
//Check atomized local name and ns
name = _coreReaderNameTable.Get(name);
ns = ns != null ? _coreReaderNameTable.Get(ns) : string.Empty;
if (name == null || ns == null)
{ //Name or ns not found in the nameTable, then attribute is not found
return false;
}
if (_coreReader.MoveToAttribute(name, ns))
{
_validationState = ValidatingReaderState.OnAttribute;
if (_inlineSchemaParser == null)
{
_attributePSVI = GetAttributePSVI(name, ns);
Debug.Assert(_attributePSVI != null);
}
else
{ //Parsing inline schema, no PSVI for schema attributes
_attributePSVI = null;
}
goto Found;
}
else
{ //Default attribute
ValidatingReaderNodeData defaultNode = GetDefaultAttribute(name, ns, true);
if (defaultNode != null)
{
_attributePSVI = defaultNode.AttInfo;
_cachedNode = defaultNode;
_validationState = ValidatingReaderState.OnDefaultAttribute;
goto Found;
}
}
return false;
Found:
if (_validationState == ValidatingReaderState.OnReadBinaryContent)
{
_readBinaryHelper.Finish();
_validationState = _savedState;
}
return true;
}