Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / Dom / XmlNamedNodeMap.cs / 1305376 / XmlNamedNodeMap.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
namespace System.Xml {
using System.Collections;
// Represents a collection of nodes that can be accessed by name or index.
public class XmlNamedNodeMap : IEnumerable {
internal XmlNode parent;
internal ArrayList nodes;
internal XmlNamedNodeMap( XmlNode parent ) {
this.parent = parent;
this.nodes = null;
}
// Retrieves a XmlNode specified by name.
public virtual XmlNode GetNamedItem(String name) {
int offset = FindNodeOffset(name);
if (offset >= 0)
return(XmlNode) Nodes[offset];
return null;
}
// Adds a XmlNode using its Name property
public virtual XmlNode SetNamedItem(XmlNode node) {
if ( node == null )
return null;
int offset = FindNodeOffset( node.LocalName, node.NamespaceURI );
if (offset == -1) {
AddNode( node );
return null;
}
else {
return ReplaceNodeAt( offset, node );
}
}
// Removes the node specified by name.
public virtual XmlNode RemoveNamedItem(String name) {
int offset = FindNodeOffset(name);
if (offset >= 0) {
return RemoveNodeAt( offset );
}
return null;
}
// Gets the number of nodes in this XmlNamedNodeMap.
public virtual int Count {
[System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")]
get {
if (nodes != null)
return nodes.Count;
return 0;
}
}
// Retrieves the node at the specified index in this XmlNamedNodeMap.
public virtual XmlNode Item(int index) {
if (index < 0 || index >= Nodes.Count)
return null;
try {
return(XmlNode) Nodes[index];
} catch ( ArgumentOutOfRangeException ) {
throw new IndexOutOfRangeException(Res.GetString(Res.Xdom_IndexOutOfRange));
}
}
//
// DOM Level 2
//
// Retrieves a node specified by LocalName and NamespaceURI.
public virtual XmlNode GetNamedItem(String localName, String namespaceURI) {
int offset = FindNodeOffset( localName, namespaceURI );
if (offset >= 0)
return(XmlNode) Nodes[offset];
return null;
}
// Removes a node specified by local name and namespace URI.
public virtual XmlNode RemoveNamedItem(String localName, String namespaceURI) {
int offset = FindNodeOffset( localName, namespaceURI );
if (offset >= 0) {
return RemoveNodeAt( offset );
}
return null;
}
internal ArrayList Nodes {
get {
if (nodes == null)
nodes = new ArrayList();
return nodes;
}
}
public virtual IEnumerator GetEnumerator() {
if ( nodes == null ) {
return XmlDocument.EmptyEnumerator;
}
else {
return Nodes.GetEnumerator();
}
}
internal int FindNodeOffset( string name ) {
int c = this.Count;
for (int i = 0; i < c; i++) {
XmlNode node = (XmlNode) Nodes[i];
if (name == node.Name)
return i;
}
return -1;
}
internal int FindNodeOffset( string localName, string namespaceURI ) {
int c = this.Count;
for (int i = 0; i < c; i++) {
XmlNode node = (XmlNode) Nodes[i];
if (node.LocalName == localName && node.NamespaceURI == namespaceURI)
return i;
}
return -1;
}
internal virtual XmlNode AddNode( XmlNode node ) {
XmlNode oldParent;
if ( node.NodeType == XmlNodeType.Attribute )
oldParent = ((XmlAttribute)node).OwnerElement;
else
oldParent = node.ParentNode;
string nodeValue = node.Value;
XmlNodeChangedEventArgs args = parent.GetEventArgs( node, oldParent, parent, nodeValue, nodeValue, XmlNodeChangedAction.Insert );
if (args != null)
parent.BeforeEvent( args );
Nodes.Add( node );
node.SetParent( parent );
if (args != null)
parent.AfterEvent( args );
return node;
}
internal virtual XmlNode AddNodeForLoad(XmlNode node, XmlDocument doc) {
XmlNodeChangedEventArgs args = doc.GetInsertEventArgsForLoad(node, parent);
if (args != null) {
doc.BeforeEvent(args);
}
Nodes.Add(node);
node.SetParent(parent);
if (args != null) {
doc.AfterEvent(args);
}
return node;
}
internal virtual XmlNode RemoveNodeAt( int i ) {
XmlNode oldNode = (XmlNode)Nodes[i];
string oldNodeValue = oldNode.Value;
XmlNodeChangedEventArgs args = parent.GetEventArgs( oldNode, parent, null, oldNodeValue, oldNodeValue, XmlNodeChangedAction.Remove );
if (args != null)
parent.BeforeEvent( args );
Nodes.RemoveAt(i);
oldNode.SetParent( null );
if (args != null)
parent.AfterEvent( args );
return oldNode;
}
internal XmlNode ReplaceNodeAt( int i, XmlNode node ) {
XmlNode oldNode = RemoveNodeAt( i );
InsertNodeAt( i, node );
return oldNode;
}
internal virtual XmlNode InsertNodeAt( int i, XmlNode node ) {
XmlNode oldParent;
if ( node.NodeType == XmlNodeType.Attribute )
oldParent = ((XmlAttribute)node).OwnerElement;
else
oldParent = node.ParentNode;
string nodeValue = node.Value;
XmlNodeChangedEventArgs args = parent.GetEventArgs( node, oldParent, parent, nodeValue, nodeValue, XmlNodeChangedAction.Insert );
if (args != null)
parent.BeforeEvent( args );
Nodes.Insert( i, node );
node.SetParent( parent );
if (args != null)
parent.AfterEvent( args );
return node;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PageContentAsyncResult.cs
- HMAC.cs
- DocumentEventArgs.cs
- QueryExpr.cs
- lengthconverter.cs
- ResourceDescriptionAttribute.cs
- XamlWriter.cs
- OleDbErrorCollection.cs
- XomlCompilerParameters.cs
- SqlSelectStatement.cs
- DPCustomTypeDescriptor.cs
- Crc32.cs
- DrawingImage.cs
- EtwTrackingBehaviorElement.cs
- MethodBuilder.cs
- HttpResponse.cs
- CodeExporter.cs
- ColorBlend.cs
- Frame.cs
- DataBoundControl.cs
- AttachedPropertyBrowsableAttribute.cs
- FieldToken.cs
- ExpressionHelper.cs
- SystemResourceHost.cs
- OperationPickerDialog.designer.cs
- Material.cs
- InputMethodStateChangeEventArgs.cs
- DataMember.cs
- GeometryModel3D.cs
- SerializationStore.cs
- SettingsPropertyValue.cs
- Decimal.cs
- NavigationFailedEventArgs.cs
- ObjectMemberMapping.cs
- TextTreeUndo.cs
- unsafenativemethodstextservices.cs
- SafeLocalMemHandle.cs
- DefaultHttpHandler.cs
- RootBrowserWindowProxy.cs
- MimeParameters.cs
- MethodRental.cs
- SelectorAutomationPeer.cs
- Misc.cs
- IisTraceListener.cs
- AuthorizationSection.cs
- DbProviderConfigurationHandler.cs
- DefaultSection.cs
- OciHandle.cs
- MetadataCache.cs
- Variable.cs
- GetPageNumberCompletedEventArgs.cs
- __ConsoleStream.cs
- ToolStripMenuItem.cs
- OrderedDictionary.cs
- CookieProtection.cs
- LocatorGroup.cs
- SplayTreeNode.cs
- ChannelSinkStacks.cs
- TCPClient.cs
- ListViewDeletedEventArgs.cs
- CapabilitiesState.cs
- DbExpressionBuilder.cs
- ListViewGroupItemCollection.cs
- RoutedUICommand.cs
- HttpListenerResponse.cs
- BaseCollection.cs
- DiscoveryOperationContext.cs
- NullableLongAverageAggregationOperator.cs
- ImplicitInputBrush.cs
- WebScriptMetadataMessage.cs
- ManagedWndProcTracker.cs
- ComboBox.cs
- DiagnosticTraceSource.cs
- HighlightVisual.cs
- EntityExpressionVisitor.cs
- DocumentXPathNavigator.cs
- DefaultSection.cs
- FullTrustAssemblyCollection.cs
- VectorAnimation.cs
- PrtCap_Base.cs
- XPathNodePointer.cs
- HashMembershipCondition.cs
- SqlBulkCopyColumnMapping.cs
- HostedImpersonationContext.cs
- Range.cs
- XmlExpressionDumper.cs
- BinaryExpression.cs
- TextEndOfLine.cs
- EntityWrapperFactory.cs
- Attributes.cs
- HashFinalRequest.cs
- Underline.cs
- ColumnTypeConverter.cs
- ErrorStyle.cs
- LineInfo.cs
- COM2PropertyPageUITypeConverter.cs
- FontNamesConverter.cs
- SecurityTokenParameters.cs
- SecurityValidationBehavior.cs
- BindingGroup.cs