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
- DefaultBinder.cs
- SvcFileManager.cs
- XmlCountingReader.cs
- CompositeFontInfo.cs
- Rule.cs
- SendSecurityHeaderElementContainer.cs
- XPathNavigatorReader.cs
- Version.cs
- DateTimeFormatInfoScanner.cs
- unsafenativemethodstextservices.cs
- BitmapEffect.cs
- FixedNode.cs
- MobileListItemCollection.cs
- SharedStatics.cs
- CellPartitioner.cs
- GenericsInstances.cs
- DatagridviewDisplayedBandsData.cs
- SectionUpdates.cs
- RuntimeResourceSet.cs
- EdgeProfileValidation.cs
- TemplateParser.cs
- CalendarTable.cs
- AsyncPostBackErrorEventArgs.cs
- SendMailErrorEventArgs.cs
- InfoCardRSACryptoProvider.cs
- XPathMessageFilterTable.cs
- XmlILAnnotation.cs
- ExtensionElementCollection.cs
- VectorAnimation.cs
- Timer.cs
- GraphicsState.cs
- WsdlBuildProvider.cs
- SerializationStore.cs
- ThumbAutomationPeer.cs
- Application.cs
- x509utils.cs
- BamlVersionHeader.cs
- EntityDataSourceEntityTypeFilterConverter.cs
- WebBrowserNavigatingEventHandler.cs
- SortQueryOperator.cs
- SearchExpression.cs
- WrappedKeySecurityTokenParameters.cs
- CachedBitmap.cs
- TcpProcessProtocolHandler.cs
- dsa.cs
- ServiceBusyException.cs
- Native.cs
- TreeViewImageKeyConverter.cs
- AbandonedMutexException.cs
- PhonemeEventArgs.cs
- XamlParser.cs
- DesignerObject.cs
- NavigationService.cs
- SmtpFailedRecipientException.cs
- ScriptBehaviorDescriptor.cs
- PeerEndPoint.cs
- DataGridViewImageColumn.cs
- ObjectListFieldsPage.cs
- DataGridViewToolTip.cs
- DesignerCategoryAttribute.cs
- SocketAddress.cs
- WebPartManager.cs
- Translator.cs
- NavigationWindowAutomationPeer.cs
- DomNameTable.cs
- Cursor.cs
- BitmapImage.cs
- XmlCharacterData.cs
- BindingSource.cs
- ToolStripItemEventArgs.cs
- RegexCompilationInfo.cs
- WSDualHttpBindingCollectionElement.cs
- MouseDevice.cs
- CloudCollection.cs
- DataSourceXmlSubItemAttribute.cs
- NetworkCredential.cs
- ReturnType.cs
- MetadataCache.cs
- JapaneseLunisolarCalendar.cs
- UrlPath.cs
- AdditionalEntityFunctions.cs
- XmlSchemaSimpleTypeUnion.cs
- TraceSection.cs
- MenuItemStyle.cs
- Int32RectValueSerializer.cs
- SqlExpressionNullability.cs
- XmlNotation.cs
- HttpCachePolicyElement.cs
- SqlRetyper.cs
- Rectangle.cs
- Object.cs
- SqlCommandSet.cs
- SoapSchemaExporter.cs
- SoapIncludeAttribute.cs
- ConvertEvent.cs
- DTCTransactionManager.cs
- SiteMapNodeCollection.cs
- EventLogPermission.cs
- XPathArrayIterator.cs
- HelpProvider.cs