Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / XsltOld / WriterOutput.cs / 1305376 / WriterOutput.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
namespace System.Xml.Xsl.XsltOld {
using Res = System.Xml.Utils.Res;
using System;
using System.Diagnostics;
using System.Xml;
using System.Xml.XPath;
using System.Collections;
internal class WriterOutput : RecordOutput {
private XmlWriter writer;
private Processor processor;
internal WriterOutput(Processor processor, XmlWriter writer) {
if (writer == null) {
throw new ArgumentNullException("writer");
}
this.writer = writer;
this.processor = processor;
}
// RecordOutput interface method implementation
//
public Processor.OutputResult RecordDone(RecordBuilder record) {
BuilderInfo mainNode = record.MainNode;
switch (mainNode.NodeType) {
case XmlNodeType.Element:
this.writer.WriteStartElement(mainNode.Prefix, mainNode.LocalName, mainNode.NamespaceURI);
WriteAttributes(record.AttributeList, record.AttributeCount);
if (mainNode.IsEmptyTag) {
this.writer.WriteEndElement();
}
break;
case XmlNodeType.Text:
case XmlNodeType.Whitespace:
case XmlNodeType.SignificantWhitespace:
this.writer.WriteString(mainNode.Value);
break;
case XmlNodeType.CDATA:
Debug.Assert(false, "XSLT never gives us CDATA");
this.writer.WriteCData(mainNode.Value);
break;
case XmlNodeType.EntityReference:
this.writer.WriteEntityRef(mainNode.LocalName);
break;
case XmlNodeType.ProcessingInstruction:
this.writer.WriteProcessingInstruction(mainNode.LocalName, mainNode.Value);
break;
case XmlNodeType.Comment:
this.writer.WriteComment(mainNode.Value);
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
this.writer.WriteRaw(mainNode.Value);
break;
case XmlNodeType.EndElement:
this.writer.WriteFullEndElement();
break;
case XmlNodeType.None:
case XmlNodeType.Attribute:
case XmlNodeType.Entity:
case XmlNodeType.Notation:
case XmlNodeType.DocumentFragment:
case XmlNodeType.EndEntity:
break;
default:
Debug.Fail("Invalid NodeType on output: " + mainNode.NodeType);
break;
}
record.Reset();
return Processor.OutputResult.Continue;
}
public void TheEnd() {
this.writer.Flush();
this.writer = null;
}
private void WriteAttributes(ArrayList list, int count) {
Debug.Assert(list.Count >= count);
for (int attrib = 0; attrib < count; attrib ++) {
Debug.Assert(list[attrib] is BuilderInfo);
BuilderInfo attribute = (BuilderInfo) list[attrib];
this.writer.WriteAttributeString(attribute.Prefix, attribute.LocalName, attribute.NamespaceURI, attribute.Value);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
namespace System.Xml.Xsl.XsltOld {
using Res = System.Xml.Utils.Res;
using System;
using System.Diagnostics;
using System.Xml;
using System.Xml.XPath;
using System.Collections;
internal class WriterOutput : RecordOutput {
private XmlWriter writer;
private Processor processor;
internal WriterOutput(Processor processor, XmlWriter writer) {
if (writer == null) {
throw new ArgumentNullException("writer");
}
this.writer = writer;
this.processor = processor;
}
// RecordOutput interface method implementation
//
public Processor.OutputResult RecordDone(RecordBuilder record) {
BuilderInfo mainNode = record.MainNode;
switch (mainNode.NodeType) {
case XmlNodeType.Element:
this.writer.WriteStartElement(mainNode.Prefix, mainNode.LocalName, mainNode.NamespaceURI);
WriteAttributes(record.AttributeList, record.AttributeCount);
if (mainNode.IsEmptyTag) {
this.writer.WriteEndElement();
}
break;
case XmlNodeType.Text:
case XmlNodeType.Whitespace:
case XmlNodeType.SignificantWhitespace:
this.writer.WriteString(mainNode.Value);
break;
case XmlNodeType.CDATA:
Debug.Assert(false, "XSLT never gives us CDATA");
this.writer.WriteCData(mainNode.Value);
break;
case XmlNodeType.EntityReference:
this.writer.WriteEntityRef(mainNode.LocalName);
break;
case XmlNodeType.ProcessingInstruction:
this.writer.WriteProcessingInstruction(mainNode.LocalName, mainNode.Value);
break;
case XmlNodeType.Comment:
this.writer.WriteComment(mainNode.Value);
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
this.writer.WriteRaw(mainNode.Value);
break;
case XmlNodeType.EndElement:
this.writer.WriteFullEndElement();
break;
case XmlNodeType.None:
case XmlNodeType.Attribute:
case XmlNodeType.Entity:
case XmlNodeType.Notation:
case XmlNodeType.DocumentFragment:
case XmlNodeType.EndEntity:
break;
default:
Debug.Fail("Invalid NodeType on output: " + mainNode.NodeType);
break;
}
record.Reset();
return Processor.OutputResult.Continue;
}
public void TheEnd() {
this.writer.Flush();
this.writer = null;
}
private void WriteAttributes(ArrayList list, int count) {
Debug.Assert(list.Count >= count);
for (int attrib = 0; attrib < count; attrib ++) {
Debug.Assert(list[attrib] is BuilderInfo);
BuilderInfo attribute = (BuilderInfo) list[attrib];
this.writer.WriteAttributeString(attribute.Prefix, attribute.LocalName, attribute.NamespaceURI, attribute.Value);
}
}
}
}
// 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
- ReadOnlyDictionary.cs
- StringArrayConverter.cs
- TreeChangeInfo.cs
- ActivityCodeDomSerializationManager.cs
- EventSetter.cs
- DataChangedEventManager.cs
- ToolboxItemSnapLineBehavior.cs
- QueryOptionExpression.cs
- DataFieldCollectionEditor.cs
- sqlnorm.cs
- RenderData.cs
- XamlReader.cs
- ConfigurationSchemaErrors.cs
- EventMappingSettingsCollection.cs
- _CookieModule.cs
- Constraint.cs
- InternalRelationshipCollection.cs
- Classification.cs
- RegexMatch.cs
- DbReferenceCollection.cs
- ReadOnlyPropertyMetadata.cs
- UseAttributeSetsAction.cs
- ProtocolsConfigurationHandler.cs
- SlipBehavior.cs
- ScrollItemPattern.cs
- SqlInternalConnectionTds.cs
- IFormattable.cs
- EditableRegion.cs
- DiscoveryClientRequestChannel.cs
- ReadOnlyDataSourceView.cs
- PersonalizationStateInfoCollection.cs
- RadioButtonAutomationPeer.cs
- HttpPostedFile.cs
- WebPartsPersonalizationAuthorization.cs
- MessageBox.cs
- WmpBitmapEncoder.cs
- ComplexPropertyEntry.cs
- MailBnfHelper.cs
- UnmanagedHandle.cs
- SrgsToken.cs
- GroupBoxRenderer.cs
- JsonReader.cs
- EventMappingSettingsCollection.cs
- EnumType.cs
- XmlIlGenerator.cs
- EditingCoordinator.cs
- CheckoutException.cs
- DocumentPaginator.cs
- SvcMapFileSerializer.cs
- DesignTimeHTMLTextWriter.cs
- HostingPreferredMapPath.cs
- ServiceDebugElement.cs
- CompositeTypefaceMetrics.cs
- ImageIndexConverter.cs
- XmlAttributeProperties.cs
- HttpListenerElement.cs
- GenericTypeParameterBuilder.cs
- WindowShowOrOpenTracker.cs
- DataGridCellItemAutomationPeer.cs
- WebPartConnectionsCloseVerb.cs
- MessageBox.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- _TransmitFileOverlappedAsyncResult.cs
- SemanticResultValue.cs
- TreeView.cs
- LeaseManager.cs
- WmlValidationSummaryAdapter.cs
- CharEnumerator.cs
- GeneralTransform2DTo3D.cs
- ComboBoxDesigner.cs
- URLString.cs
- SolidColorBrush.cs
- baseaxisquery.cs
- ParameterCollection.cs
- UnsafeNativeMethodsTablet.cs
- MemberAccessException.cs
- ObjectSpanRewriter.cs
- AlphabeticalEnumConverter.cs
- XPathNodeList.cs
- SafeTimerHandle.cs
- xmlformatgeneratorstatics.cs
- StandardToolWindows.cs
- DBSchemaTable.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- XmlUTF8TextReader.cs
- UpDownEvent.cs
- RequestCachePolicy.cs
- DirectoryObjectSecurity.cs
- FixedPageProcessor.cs
- DbMetaDataColumnNames.cs
- DeflateInput.cs
- ViewStateException.cs
- HtmlTableRow.cs
- LocationSectionRecord.cs
- SimpleFieldTemplateUserControl.cs
- LocalFileSettingsProvider.cs
- CommandConverter.cs
- DebugController.cs
- X509Certificate2.cs
- SurrogateDataContract.cs