Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / XmlUtils / System / Xml / Xsl / XsltOld / WriterOutput.cs / 1 / 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
- Memoizer.cs
- ArrangedElement.cs
- xml.cs
- SafeLibraryHandle.cs
- CharUnicodeInfo.cs
- SchemaElement.cs
- NotifyCollectionChangedEventArgs.cs
- UrlMappingsModule.cs
- XPathBuilder.cs
- HtmlInputImage.cs
- XPathAncestorIterator.cs
- FilterElement.cs
- JournalEntryListConverter.cs
- DataGrid.cs
- SystemUnicastIPAddressInformation.cs
- PeerResolverElement.cs
- XmlSchemaSimpleTypeList.cs
- EditorZoneAutoFormat.cs
- Int32RectValueSerializer.cs
- ProcessHostServerConfig.cs
- HtmlProps.cs
- NumericPagerField.cs
- _TLSstream.cs
- WindowsGrip.cs
- TypeTypeConverter.cs
- ObjectDataSourceFilteringEventArgs.cs
- OutputCacheProfile.cs
- XmlDataDocument.cs
- DynamicValidatorEventArgs.cs
- ClientApiGenerator.cs
- ServiceDescriptionData.cs
- ProfileSettings.cs
- ControlPaint.cs
- HostedTransportConfigurationBase.cs
- ArgumentNullException.cs
- AnimationException.cs
- ObjectDataSourceEventArgs.cs
- TextRangeBase.cs
- InstanceCreationEditor.cs
- PeerTransportSecurityElement.cs
- DockPattern.cs
- DataSourceXmlSubItemAttribute.cs
- SymbolResolver.cs
- IisTraceWebEventProvider.cs
- RepeaterCommandEventArgs.cs
- ZipIOFileItemStream.cs
- OciHandle.cs
- ComEventsInfo.cs
- CapabilitiesState.cs
- XmlException.cs
- Constants.cs
- MonitorWrapper.cs
- ColumnHeaderConverter.cs
- BitmapEffectDrawing.cs
- DataSourceCollectionBase.cs
- FrameSecurityDescriptor.cs
- Psha1DerivedKeyGenerator.cs
- BindableAttribute.cs
- XmlDataSourceView.cs
- CaseStatement.cs
- HttpCapabilitiesSectionHandler.cs
- DataControlFieldCell.cs
- WindowsListViewGroup.cs
- PropertyPath.cs
- PenContext.cs
- RemotingConfiguration.cs
- ToolStripItemImageRenderEventArgs.cs
- NamespaceInfo.cs
- Binding.cs
- TableCellCollection.cs
- MessageRpc.cs
- EventProxy.cs
- PeerSecurityHelpers.cs
- recordstate.cs
- ImageField.cs
- FragmentNavigationEventArgs.cs
- Vector3DCollectionValueSerializer.cs
- MemoryMappedFile.cs
- ResourceBinder.cs
- TableRowCollection.cs
- WebPartCancelEventArgs.cs
- UpdatePanelTriggerCollection.cs
- TraceEventCache.cs
- CodeDefaultValueExpression.cs
- InputElement.cs
- ActiveXHelper.cs
- DesignerSerializationVisibilityAttribute.cs
- SkipStoryboardToFill.cs
- RuleInfoComparer.cs
- ContextQuery.cs
- EventRouteFactory.cs
- TextContainerChangeEventArgs.cs
- ArgumentDesigner.xaml.cs
- DecimalStorage.cs
- ValidationResult.cs
- _FixedSizeReader.cs
- WebBrowserUriTypeConverter.cs
- DataObjectCopyingEventArgs.cs
- FixedSOMTable.cs
- CreateRefExpr.cs