private void ProcessNamespaces() {
switch ( reader.NodeType ) {
case XmlNodeType.Element:
nsManager.PushScope();
string prefix = reader.Prefix;
string ns = reader.NamespaceURI;
if ( nsManager.LookupNamespace( prefix ) != ns ) {
AddNamespace( prefix, ns );
}
if ( reader.MoveToFirstAttribute() ) {
do {
prefix = reader.Prefix;
ns = reader.NamespaceURI;
if ( Ref.Equal( ns, xmlnsUri ) ) {
if ( prefix.Length == 0 ) {
nsManager.AddNamespace( string.Empty, reader.Value );
RemoveNamespace( string.Empty, xmlns );
}
else {
prefix = reader.LocalName;
nsManager.AddNamespace( prefix, reader.Value );
RemoveNamespace( xmlns, prefix );
}
}
else if ( prefix.Length != 0 && nsManager.LookupNamespace( prefix ) != ns ) {
AddNamespace( prefix, ns );
}
} while ( reader.MoveToNextAttribute() );
reader.MoveToElement();
}
if ( reader.IsEmptyElement ) {
state = State.PopNamespaceScope;
}
break;
case XmlNodeType.EndElement:
state = State.PopNamespaceScope;
break;
}
}