Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Xml / System / Xml / Dom / XmlAttribute.cs / 1 / XmlAttribute.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
namespace System.Xml {
using System;
using System.Xml.Schema;
using System.Xml.XPath;
using System.Diagnostics;
// Represents an attribute of the XMLElement object. Valid and default
// values for the attribute are defined in a DTD or schema.
public class XmlAttribute : XmlNode {
XmlName name;
XmlLinkedNode lastChild;
internal XmlAttribute( XmlName name, XmlDocument doc ): base( doc ) {
Debug.Assert(name!=null);
Debug.Assert(doc!=null);
this.parentNode = null;
if ( !doc.IsLoading ) {
XmlDocument.CheckName( name.Prefix );
XmlDocument.CheckName( name.LocalName );
}
if (name.LocalName.Length == 0)
throw new ArgumentException(Res.GetString(Res.Xdom_Attr_Name));
this.name = name;
}
internal int LocalNameHash {
get { return name.HashCode; }
}
protected internal XmlAttribute( string prefix, string localName, string namespaceURI, XmlDocument doc )
: this(doc.AddAttrXmlName(prefix, localName, namespaceURI, null), doc) {
}
internal XmlName XmlName {
get { return name; }
set { name = value; }
}
// Creates a duplicate of this node.
public override XmlNode CloneNode(bool deep) {
// CloneNode for attributes is deep irrespective of parameter 'deep' value
Debug.Assert( OwnerDocument != null );
XmlDocument doc = OwnerDocument;
XmlAttribute attr = doc.CreateAttribute( Prefix, LocalName, NamespaceURI );
attr.CopyChildren( doc, this, true );
return attr;
}
// Gets the parent of this node (for nodes that can have parents).
public override XmlNode ParentNode {
get { return null;}
}
// Gets the name of the node.
public override String Name {
get { return name.Name;}
}
// Gets the name of the node without the namespace prefix.
public override String LocalName {
get { return name.LocalName;}
}
// Gets the namespace URI of this node.
public override String NamespaceURI {
get { return name.NamespaceURI;}
}
// Gets or sets the namespace prefix of this node.
public override String Prefix {
get { return name.Prefix;}
set { name = name.OwnerDocument.AddAttrXmlName( value, LocalName, NamespaceURI, SchemaInfo ); }
}
// Gets the type of the current node.
public override XmlNodeType NodeType {
get { return XmlNodeType.Attribute;}
}
// Gets the XmlDocument that contains this node.
public override XmlDocument OwnerDocument {
get {
return name.OwnerDocument;
}
}
// Gets or sets the value of the node.
public override String Value {
get { return InnerText; }
set { InnerText = value; } //use InnerText which has perf optimization
}
public override IXmlSchemaInfo SchemaInfo {
get {
return name;
}
}
public override String InnerText {
set {
if (PrepareOwnerElementInElementIdAttrMap()) {
string innerText = base.InnerText;
base.InnerText = value;
ResetOwnerElementInElementIdAttrMap(innerText);
}
else {
base.InnerText = value;
}
}
}
internal bool PrepareOwnerElementInElementIdAttrMap() {
XmlDocument ownerDocument = OwnerDocument;
if (ownerDocument.DtdSchemaInfo != null) { // DTD exists
XmlElement ownerElement = OwnerElement;
if (ownerElement != null) {
return ownerElement.Attributes.PrepareParentInElementIdAttrMap(Prefix, LocalName);
}
}
return false;
}
internal void ResetOwnerElementInElementIdAttrMap(string oldInnerText) {
XmlElement ownerElement = OwnerElement;
if (ownerElement != null) {
ownerElement.Attributes.ResetParentInElementIdAttrMap(oldInnerText, InnerText);
}
}
internal override bool IsContainer {
get { return true;}
}
//the function is provided only at Load time to speed up Load process
internal override XmlNode AppendChildForLoad(XmlNode newChild, XmlDocument doc) {
XmlNodeChangedEventArgs args = doc.GetInsertEventArgsForLoad( newChild, this );
if (args != null)
doc.BeforeEvent( args );
XmlLinkedNode newNode = (XmlLinkedNode)newChild;
if (lastChild == null) { // if LastNode == null
newNode.next = newNode;
lastChild = newNode;
newNode.SetParentForLoad(this);
}
else {
XmlLinkedNode refNode = lastChild; // refNode = LastNode;
newNode.next = refNode.next;
refNode.next = newNode;
lastChild = newNode; // LastNode = newNode;
if (refNode.IsText
&& newNode.IsText) {
NestTextNodes(refNode, newNode);
}
else {
newNode.SetParentForLoad(this);
}
}
if (args != null)
doc.AfterEvent( args );
return newNode;
}
internal override XmlLinkedNode LastNode {
get { return lastChild;}
set { lastChild = value;}
}
internal override bool IsValidChildType( XmlNodeType type ) {
return(type == XmlNodeType.Text) || (type == XmlNodeType.EntityReference);
}
// Gets a value indicating whether the value was explicitly set.
public virtual bool Specified {
get { return true;}
}
public override XmlNode InsertBefore(XmlNode newChild, XmlNode refChild) {
XmlNode node;
if (PrepareOwnerElementInElementIdAttrMap()) {
string innerText = InnerText;
node = base.InsertBefore(newChild, refChild);
ResetOwnerElementInElementIdAttrMap(innerText);
}
else {
node = base.InsertBefore(newChild, refChild);
}
return node;
}
public override XmlNode InsertAfter(XmlNode newChild, XmlNode refChild) {
XmlNode node;
if (PrepareOwnerElementInElementIdAttrMap()) {
string innerText = InnerText;
node = base.InsertAfter(newChild, refChild);
ResetOwnerElementInElementIdAttrMap(innerText);
}
else {
node = base.InsertAfter(newChild, refChild);
}
return node;
}
public override XmlNode ReplaceChild(XmlNode newChild, XmlNode oldChild) {
XmlNode node;
if (PrepareOwnerElementInElementIdAttrMap()) {
string innerText = InnerText;
node = base.ReplaceChild(newChild, oldChild);
ResetOwnerElementInElementIdAttrMap(innerText);
}
else {
node = base.ReplaceChild(newChild, oldChild);
}
return node;
}
public override XmlNode RemoveChild(XmlNode oldChild) {
XmlNode node;
if (PrepareOwnerElementInElementIdAttrMap()) {
string innerText = InnerText;
node = base.RemoveChild(oldChild);
ResetOwnerElementInElementIdAttrMap(innerText);
}
else {
node = base.RemoveChild(oldChild);
}
return node;
}
public override XmlNode PrependChild(XmlNode newChild) {
XmlNode node;
if (PrepareOwnerElementInElementIdAttrMap()) {
string innerText = InnerText;
node = base.PrependChild(newChild);
ResetOwnerElementInElementIdAttrMap(innerText);
}
else {
node = base.PrependChild(newChild);
}
return node;
}
public override XmlNode AppendChild(XmlNode newChild) {
XmlNode node;
if (PrepareOwnerElementInElementIdAttrMap()) {
string innerText = InnerText;
node = base.AppendChild(newChild);
ResetOwnerElementInElementIdAttrMap(innerText);
}
else {
node = base.AppendChild(newChild);
}
return node;
}
// DOM Level 2
// Gets the XmlElement node that contains this attribute.
public virtual XmlElement OwnerElement {
get {
return parentNode as XmlElement;
}
}
// Gets or sets the markup representing just the children of this node.
public override string InnerXml {
set {
RemoveAll();
XmlLoader loader = new XmlLoader();
loader.LoadInnerXmlAttribute( this, value );
}
}
// Saves the node to the specified XmlWriter.
public override void WriteTo(XmlWriter w) {
w.WriteStartAttribute( Prefix, LocalName, NamespaceURI );
WriteContentTo(w);
w.WriteEndAttribute();
}
// Saves all the children of the node to the specified XmlWriter.
public override void WriteContentTo(XmlWriter w) {
for (XmlNode node = FirstChild; node != null; node = node.NextSibling) {
node.WriteTo(w);
}
}
public override String BaseURI {
get {
if ( OwnerElement != null )
return OwnerElement.BaseURI;
return String.Empty;
}
}
internal override void SetParent(XmlNode node) {
this.parentNode = node;
}
internal override XmlSpace XmlSpace {
get {
if ( OwnerElement != null )
return OwnerElement.XmlSpace;
return XmlSpace.None;
}
}
internal override String XmlLang {
get {
if ( OwnerElement != null )
return OwnerElement.XmlLang;
return String.Empty;
}
}
internal override XPathNodeType XPNodeType {
get {
if (IsNamespace) {
return XPathNodeType.Namespace;
}
return XPathNodeType.Attribute;
}
}
internal override string XPLocalName {
get {
string localName = name.LocalName;
if (localName == OwnerDocument.strXmlns )
return string.Empty;
return localName;
}
}
internal bool IsNamespace {
get {
return Ref.Equal(name.NamespaceURI, name.OwnerDocument.strReservedXmlns);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
namespace System.Xml {
using System;
using System.Xml.Schema;
using System.Xml.XPath;
using System.Diagnostics;
// Represents an attribute of the XMLElement object. Valid and default
// values for the attribute are defined in a DTD or schema.
public class XmlAttribute : XmlNode {
XmlName name;
XmlLinkedNode lastChild;
internal XmlAttribute( XmlName name, XmlDocument doc ): base( doc ) {
Debug.Assert(name!=null);
Debug.Assert(doc!=null);
this.parentNode = null;
if ( !doc.IsLoading ) {
XmlDocument.CheckName( name.Prefix );
XmlDocument.CheckName( name.LocalName );
}
if (name.LocalName.Length == 0)
throw new ArgumentException(Res.GetString(Res.Xdom_Attr_Name));
this.name = name;
}
internal int LocalNameHash {
get { return name.HashCode; }
}
protected internal XmlAttribute( string prefix, string localName, string namespaceURI, XmlDocument doc )
: this(doc.AddAttrXmlName(prefix, localName, namespaceURI, null), doc) {
}
internal XmlName XmlName {
get { return name; }
set { name = value; }
}
// Creates a duplicate of this node.
public override XmlNode CloneNode(bool deep) {
// CloneNode for attributes is deep irrespective of parameter 'deep' value
Debug.Assert( OwnerDocument != null );
XmlDocument doc = OwnerDocument;
XmlAttribute attr = doc.CreateAttribute( Prefix, LocalName, NamespaceURI );
attr.CopyChildren( doc, this, true );
return attr;
}
// Gets the parent of this node (for nodes that can have parents).
public override XmlNode ParentNode {
get { return null;}
}
// Gets the name of the node.
public override String Name {
get { return name.Name;}
}
// Gets the name of the node without the namespace prefix.
public override String LocalName {
get { return name.LocalName;}
}
// Gets the namespace URI of this node.
public override String NamespaceURI {
get { return name.NamespaceURI;}
}
// Gets or sets the namespace prefix of this node.
public override String Prefix {
get { return name.Prefix;}
set { name = name.OwnerDocument.AddAttrXmlName( value, LocalName, NamespaceURI, SchemaInfo ); }
}
// Gets the type of the current node.
public override XmlNodeType NodeType {
get { return XmlNodeType.Attribute;}
}
// Gets the XmlDocument that contains this node.
public override XmlDocument OwnerDocument {
get {
return name.OwnerDocument;
}
}
// Gets or sets the value of the node.
public override String Value {
get { return InnerText; }
set { InnerText = value; } //use InnerText which has perf optimization
}
public override IXmlSchemaInfo SchemaInfo {
get {
return name;
}
}
public override String InnerText {
set {
if (PrepareOwnerElementInElementIdAttrMap()) {
string innerText = base.InnerText;
base.InnerText = value;
ResetOwnerElementInElementIdAttrMap(innerText);
}
else {
base.InnerText = value;
}
}
}
internal bool PrepareOwnerElementInElementIdAttrMap() {
XmlDocument ownerDocument = OwnerDocument;
if (ownerDocument.DtdSchemaInfo != null) { // DTD exists
XmlElement ownerElement = OwnerElement;
if (ownerElement != null) {
return ownerElement.Attributes.PrepareParentInElementIdAttrMap(Prefix, LocalName);
}
}
return false;
}
internal void ResetOwnerElementInElementIdAttrMap(string oldInnerText) {
XmlElement ownerElement = OwnerElement;
if (ownerElement != null) {
ownerElement.Attributes.ResetParentInElementIdAttrMap(oldInnerText, InnerText);
}
}
internal override bool IsContainer {
get { return true;}
}
//the function is provided only at Load time to speed up Load process
internal override XmlNode AppendChildForLoad(XmlNode newChild, XmlDocument doc) {
XmlNodeChangedEventArgs args = doc.GetInsertEventArgsForLoad( newChild, this );
if (args != null)
doc.BeforeEvent( args );
XmlLinkedNode newNode = (XmlLinkedNode)newChild;
if (lastChild == null) { // if LastNode == null
newNode.next = newNode;
lastChild = newNode;
newNode.SetParentForLoad(this);
}
else {
XmlLinkedNode refNode = lastChild; // refNode = LastNode;
newNode.next = refNode.next;
refNode.next = newNode;
lastChild = newNode; // LastNode = newNode;
if (refNode.IsText
&& newNode.IsText) {
NestTextNodes(refNode, newNode);
}
else {
newNode.SetParentForLoad(this);
}
}
if (args != null)
doc.AfterEvent( args );
return newNode;
}
internal override XmlLinkedNode LastNode {
get { return lastChild;}
set { lastChild = value;}
}
internal override bool IsValidChildType( XmlNodeType type ) {
return(type == XmlNodeType.Text) || (type == XmlNodeType.EntityReference);
}
// Gets a value indicating whether the value was explicitly set.
public virtual bool Specified {
get { return true;}
}
public override XmlNode InsertBefore(XmlNode newChild, XmlNode refChild) {
XmlNode node;
if (PrepareOwnerElementInElementIdAttrMap()) {
string innerText = InnerText;
node = base.InsertBefore(newChild, refChild);
ResetOwnerElementInElementIdAttrMap(innerText);
}
else {
node = base.InsertBefore(newChild, refChild);
}
return node;
}
public override XmlNode InsertAfter(XmlNode newChild, XmlNode refChild) {
XmlNode node;
if (PrepareOwnerElementInElementIdAttrMap()) {
string innerText = InnerText;
node = base.InsertAfter(newChild, refChild);
ResetOwnerElementInElementIdAttrMap(innerText);
}
else {
node = base.InsertAfter(newChild, refChild);
}
return node;
}
public override XmlNode ReplaceChild(XmlNode newChild, XmlNode oldChild) {
XmlNode node;
if (PrepareOwnerElementInElementIdAttrMap()) {
string innerText = InnerText;
node = base.ReplaceChild(newChild, oldChild);
ResetOwnerElementInElementIdAttrMap(innerText);
}
else {
node = base.ReplaceChild(newChild, oldChild);
}
return node;
}
public override XmlNode RemoveChild(XmlNode oldChild) {
XmlNode node;
if (PrepareOwnerElementInElementIdAttrMap()) {
string innerText = InnerText;
node = base.RemoveChild(oldChild);
ResetOwnerElementInElementIdAttrMap(innerText);
}
else {
node = base.RemoveChild(oldChild);
}
return node;
}
public override XmlNode PrependChild(XmlNode newChild) {
XmlNode node;
if (PrepareOwnerElementInElementIdAttrMap()) {
string innerText = InnerText;
node = base.PrependChild(newChild);
ResetOwnerElementInElementIdAttrMap(innerText);
}
else {
node = base.PrependChild(newChild);
}
return node;
}
public override XmlNode AppendChild(XmlNode newChild) {
XmlNode node;
if (PrepareOwnerElementInElementIdAttrMap()) {
string innerText = InnerText;
node = base.AppendChild(newChild);
ResetOwnerElementInElementIdAttrMap(innerText);
}
else {
node = base.AppendChild(newChild);
}
return node;
}
// DOM Level 2
// Gets the XmlElement node that contains this attribute.
public virtual XmlElement OwnerElement {
get {
return parentNode as XmlElement;
}
}
// Gets or sets the markup representing just the children of this node.
public override string InnerXml {
set {
RemoveAll();
XmlLoader loader = new XmlLoader();
loader.LoadInnerXmlAttribute( this, value );
}
}
// Saves the node to the specified XmlWriter.
public override void WriteTo(XmlWriter w) {
w.WriteStartAttribute( Prefix, LocalName, NamespaceURI );
WriteContentTo(w);
w.WriteEndAttribute();
}
// Saves all the children of the node to the specified XmlWriter.
public override void WriteContentTo(XmlWriter w) {
for (XmlNode node = FirstChild; node != null; node = node.NextSibling) {
node.WriteTo(w);
}
}
public override String BaseURI {
get {
if ( OwnerElement != null )
return OwnerElement.BaseURI;
return String.Empty;
}
}
internal override void SetParent(XmlNode node) {
this.parentNode = node;
}
internal override XmlSpace XmlSpace {
get {
if ( OwnerElement != null )
return OwnerElement.XmlSpace;
return XmlSpace.None;
}
}
internal override String XmlLang {
get {
if ( OwnerElement != null )
return OwnerElement.XmlLang;
return String.Empty;
}
}
internal override XPathNodeType XPNodeType {
get {
if (IsNamespace) {
return XPathNodeType.Namespace;
}
return XPathNodeType.Attribute;
}
}
internal override string XPLocalName {
get {
string localName = name.LocalName;
if (localName == OwnerDocument.strXmlns )
return string.Empty;
return localName;
}
}
internal bool IsNamespace {
get {
return Ref.Equal(name.NamespaceURI, name.OwnerDocument.strReservedXmlns);
}
}
}
}
// 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
- HtmlMeta.cs
- MeshGeometry3D.cs
- Util.cs
- Tablet.cs
- InlineUIContainer.cs
- XPathNodeIterator.cs
- ToolBarOverflowPanel.cs
- ServicesSection.cs
- ScriptMethodAttribute.cs
- SchemaImporterExtensionsSection.cs
- IItemProperties.cs
- ConstructorArgumentAttribute.cs
- ZipIOFileItemStream.cs
- Label.cs
- sqlmetadatafactory.cs
- DataGridItemCollection.cs
- SynchronizationFilter.cs
- HeaderedItemsControl.cs
- ContractCodeDomInfo.cs
- typedescriptorpermission.cs
- ToolStripPanelRenderEventArgs.cs
- XPathNode.cs
- TextBounds.cs
- SymmetricKeyWrap.cs
- ErrorEventArgs.cs
- InlineUIContainer.cs
- BufferedMessageData.cs
- ProcessStartInfo.cs
- View.cs
- Stack.cs
- XmlValidatingReaderImpl.cs
- WeakHashtable.cs
- SerializationSectionGroup.cs
- Menu.cs
- PreProcessInputEventArgs.cs
- TextTreeInsertUndoUnit.cs
- BitmapEffectvisualstate.cs
- EpmContentDeSerializerBase.cs
- Avt.cs
- DbXmlEnabledProviderManifest.cs
- StandardTransformFactory.cs
- TdsValueSetter.cs
- RadioButton.cs
- UnsignedPublishLicense.cs
- ServicePoint.cs
- SqlVisitor.cs
- ByteStreamMessageEncoderFactory.cs
- ConnectionManagementElement.cs
- DelegatingConfigHost.cs
- AnalyzedTree.cs
- Parsers.cs
- ReaderWriterLockWrapper.cs
- MDIControlStrip.cs
- Constants.cs
- serverconfig.cs
- TableLayout.cs
- SQLUtility.cs
- SchemaCollectionPreprocessor.cs
- __FastResourceComparer.cs
- CustomTypeDescriptor.cs
- InternalsVisibleToAttribute.cs
- HwndTarget.cs
- DbInsertCommandTree.cs
- SQLSingleStorage.cs
- TdsParameterSetter.cs
- WindowsFormsHelpers.cs
- IisTraceListener.cs
- MediaElement.cs
- UnSafeCharBuffer.cs
- CheckBoxAutomationPeer.cs
- TextEditorSpelling.cs
- DataObjectAttribute.cs
- ScaleTransform.cs
- XmlEncoding.cs
- smtppermission.cs
- ManagedIStream.cs
- PreviewKeyDownEventArgs.cs
- httpstaticobjectscollection.cs
- SQLDateTime.cs
- ItemsChangedEventArgs.cs
- ProviderIncompatibleException.cs
- QuotedPrintableStream.cs
- NamespaceMapping.cs
- DescendentsWalkerBase.cs
- ChannelFactory.cs
- DrawingContext.cs
- FreezableCollection.cs
- NoPersistProperty.cs
- PageThemeCodeDomTreeGenerator.cs
- XsdDataContractExporter.cs
- InputProviderSite.cs
- Point.cs
- UncommonField.cs
- ToolStripTextBox.cs
- ObjectSecurity.cs
- ColorContextHelper.cs
- XmlTypeMapping.cs
- IApplicationTrustManager.cs
- StructuredProperty.cs
- TdsEnums.cs