Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / Xml / System / Xml / Dom / XmlCharacterData.cs / 2 / XmlCharacterData.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
namespace System.Xml {
using System.Diagnostics;
using System.Text;
using System.Xml.XPath;
// Provides text-manipulation methods that are used by several classes.
public abstract class XmlCharacterData : XmlLinkedNode {
string data;
//base(doc) will throw exception if doc is null.
protected internal XmlCharacterData( string data, XmlDocument doc ): base( doc ) {
this.data = data;
}
// Gets or sets the value of the node.
public override String Value {
get { return Data;}
set { Data = value;}
}
// Gets or sets the concatenated values of the node and
// all its children.
public override string InnerText {
get { return Value;}
set { Value = value;}
}
// Contains this node's data.
public virtual string Data {
get {
if (data != null) {
return data;
}
else {
return String.Empty;
}
}
set {
XmlNode parent = ParentNode;
XmlNodeChangedEventArgs args = GetEventArgs( this, parent, parent, this.data, value, XmlNodeChangedAction.Change );
if (args != null)
BeforeEvent( args );
data = value;
if (args != null)
AfterEvent( args );
}
}
// Gets the length of the data, in characters.
public virtual int Length {
get {
if (data != null) {
return data.Length;
}
return 0;
}
}
// Retrieves a substring of the full string from the specified range.
public virtual String Substring(int offset, int count) {
int len = data != null ? data.Length : 0;
if (len > 0) {
if (len < (offset + count)) {
count = len - offset;
}
return data.Substring( offset, count );
}
return String.Empty;
}
// Appends the specified string to the end of the character
// data of the node.
public virtual void AppendData(String strData) {
XmlNode parent = ParentNode;
int capacity = data != null ? data.Length : 0;
if (strData != null) capacity += strData.Length;
string newValue = new StringBuilder( capacity ).Append( data ).Append( strData ).ToString();
XmlNodeChangedEventArgs args = GetEventArgs( this, parent, parent, data, newValue, XmlNodeChangedAction.Change );
if (args != null)
BeforeEvent( args );
this.data = newValue;
if (args != null)
AfterEvent( args );
}
// Insert the specified string at the specified character offset.
public virtual void InsertData(int offset, string strData) {
XmlNode parent = ParentNode;
int capacity = data != null ? data.Length : 0;
if (strData != null) capacity += strData.Length;
string newValue = new StringBuilder( capacity ).Append( data ).Insert(offset, strData).ToString();
XmlNodeChangedEventArgs args = GetEventArgs( this, parent, parent, data, newValue, XmlNodeChangedAction.Change );
if (args != null)
BeforeEvent( args );
this.data = newValue;
if (args != null)
AfterEvent( args );
}
// Remove a range of characters from the node.
public virtual void DeleteData(int offset, int count) {
//Debug.Assert(offset >= 0 && offset <= Length);
int len = data != null ? data.Length : 0;
if (len > 0) {
if (len < (offset + count)) {
count = Math.Max ( len - offset, 0);
}
}
string newValue = new StringBuilder( data ).Remove(offset, count).ToString();
XmlNode parent = ParentNode;
XmlNodeChangedEventArgs args = GetEventArgs( this, parent, parent, data, newValue, XmlNodeChangedAction.Change );
if (args != null)
BeforeEvent( args );
this.data = newValue;
if (args != null)
AfterEvent( args );
}
// Replace the specified number of characters starting at the specified offset with the
// specified string.
public virtual void ReplaceData(int offset, int count, String strData) {
//Debug.Assert(offset >= 0 && offset <= Length);
int len = data != null ? data.Length : 0;
if (len > 0) {
if (len < (offset + count)) {
count = Math.Max ( len - offset, 0);
}
}
StringBuilder temp = new StringBuilder( data ).Remove( offset, count );
string newValue = temp.Insert( offset, strData ).ToString();
XmlNode parent = ParentNode;
XmlNodeChangedEventArgs args = GetEventArgs( this, parent, parent, data, newValue, XmlNodeChangedAction.Change );
if (args != null)
BeforeEvent( args );
this.data = newValue;
if (args != null)
AfterEvent( args );
}
internal bool CheckOnData( string data ) {
return XmlCharType.Instance.IsOnlyWhitespace( data );
}
internal bool DecideXPNodeTypeForTextNodes( XmlNode node, ref XPathNodeType xnt ) {
//returns true - if all siblings of the node are processed else returns false.
//The reference XPathNodeType argument being passed in is the watermark that
//changes according to the siblings nodetype and will contain the correct
//nodetype when it returns.
Debug.Assert( XmlDocument.IsTextNode( node.NodeType ) || ( node.ParentNode != null && node.ParentNode.NodeType == XmlNodeType.EntityReference ) );
while( node != null ) {
switch( node.NodeType ) {
case XmlNodeType.Whitespace :
break;
case XmlNodeType.SignificantWhitespace :
xnt = XPathNodeType.SignificantWhitespace;
break;
case XmlNodeType.Text :
case XmlNodeType.CDATA :
xnt = XPathNodeType.Text;
return false;
case XmlNodeType.EntityReference :
bool ret = DecideXPNodeTypeForTextNodes( node.FirstChild, ref xnt );
if( !ret ) {
return false;
}
break;
default :
return false;
}
node = node.NextSibling;
}
return true;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- xdrvalidator.cs
- HeaderedItemsControl.cs
- SelectionListDesigner.cs
- RequestQueryParser.cs
- Color.cs
- Queue.cs
- InlineCollection.cs
- XmlILIndex.cs
- BindableAttribute.cs
- DoubleKeyFrameCollection.cs
- SignatureGenerator.cs
- FragmentQuery.cs
- BookmarkResumptionRecord.cs
- SQLSingle.cs
- TrustLevel.cs
- MenuItemBindingCollection.cs
- TraceData.cs
- AuthenticationModeHelper.cs
- StyleModeStack.cs
- FormsAuthenticationModule.cs
- XmlWellformedWriter.cs
- DoubleLinkList.cs
- WebPartChrome.cs
- WindowsFormsHelpers.cs
- PageCodeDomTreeGenerator.cs
- StylusButton.cs
- ObjectDataSourceSelectingEventArgs.cs
- DataBoundLiteralControl.cs
- WithStatement.cs
- LayoutEngine.cs
- CodeBlockBuilder.cs
- TrackingExtract.cs
- ListViewEditEventArgs.cs
- DiscardableAttribute.cs
- ReadOnlyPropertyMetadata.cs
- TreeNodeStyleCollection.cs
- EncodingInfo.cs
- BitmapEffectInputData.cs
- SynchronizationLockException.cs
- MatrixAnimationUsingPath.cs
- CfgSemanticTag.cs
- ParentUndoUnit.cs
- Ray3DHitTestResult.cs
- RefreshPropertiesAttribute.cs
- StrongNameHelpers.cs
- DataRecordObjectView.cs
- UpdateRecord.cs
- ScriptHandlerFactory.cs
- UnmanagedMarshal.cs
- CompareValidator.cs
- XXXOnTypeBuilderInstantiation.cs
- MediaCommands.cs
- ValueQuery.cs
- uribuilder.cs
- SafeCryptHandles.cs
- InvalidOleVariantTypeException.cs
- UrlMappingCollection.cs
- FormatConvertedBitmap.cs
- RemoveStoryboard.cs
- LinearKeyFrames.cs
- CompilationRelaxations.cs
- WindowsListViewItem.cs
- UrlMapping.cs
- DependencyObject.cs
- OLEDB_Enum.cs
- ParseHttpDate.cs
- VBCodeProvider.cs
- LinqDataSource.cs
- StructuredCompositeActivityDesigner.cs
- SubMenuStyleCollection.cs
- X509CertificateCollection.cs
- BasicHttpSecurityMode.cs
- ConfigurationValue.cs
- ImmutableClientRuntime.cs
- EventPropertyMap.cs
- SearchForVirtualItemEventArgs.cs
- MD5CryptoServiceProvider.cs
- ContextMarshalException.cs
- PropertyTabAttribute.cs
- CancellationHandlerDesigner.cs
- ScrollableControl.cs
- ToolBarPanel.cs
- SerialPort.cs
- HandlerWithFactory.cs
- PropertyKey.cs
- Itemizer.cs
- PrivilegeNotHeldException.cs
- Message.cs
- KoreanLunisolarCalendar.cs
- indexingfiltermarshaler.cs
- _HelperAsyncResults.cs
- UnsafeNativeMethods.cs
- Dispatcher.cs
- EntityStoreSchemaFilterEntry.cs
- Char.cs
- SchemaCompiler.cs
- NavigationWindow.cs
- _NativeSSPI.cs
- MergeFilterQuery.cs
- BulletedListEventArgs.cs