Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataWeb / Client / System / Data / Services / Client / XmlUtil.cs / 2 / XmlUtil.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // //// static xml utility functions // //--------------------------------------------------------------------- #if ASTORIA_CLIENT namespace System.Data.Services.Client #else namespace System.Data.Services #endif { using System.Diagnostics; using System.Globalization; using System.IO; using System.Text; using System.Xml; ////// static uri utility functions /// internal static partial class UriUtil { ///Creates a URI suitable for host-agnostic comparison purposes. /// URI to compare. ///URI suitable for comparison. private static Uri CreateBaseComparableUri(Uri uri) { Debug.Assert(uri != null, "uri != null"); uri = new Uri(uri.OriginalString.ToUpper(CultureInfo.InvariantCulture), UriKind.RelativeOrAbsolute); UriBuilder builder = new UriBuilder(uri); builder.Host = "h"; builder.Port = 80; builder.Scheme = "http"; return builder.Uri; } ///Parse the atom link relation attribute value /// atom link relation attribute value ///the assocation name or null internal static string GetNameFromAtomLinkRelationAttribute(string value) { string name = null; if (!String.IsNullOrEmpty(value)) { Uri uri = null; try { uri = new Uri(value, UriKind.RelativeOrAbsolute); } catch (UriFormatException) { // ignore the exception, obviously we don't have our expected relation value } if ((null != uri) && uri.IsAbsoluteUri) { string unescaped = uri.GetComponents(UriComponents.AbsoluteUri, UriFormat.SafeUnescaped); if (unescaped.StartsWith(XmlConstants.DataWebRelatedNamespace, StringComparison.Ordinal)) { name = unescaped.Substring(XmlConstants.DataWebRelatedNamespace.Length); } } } return name; } ///is the serviceRoot the base of the request uri /// baseUriWithSlash /// requestUri ///true if the serviceRoot is the base of the request uri internal static bool IsBaseOf(Uri baseUriWithSlash, Uri requestUri) { #if !ASTORIA_LIGHT // Uri.IsBaseOf not available return baseUriWithSlash.IsBaseOf(requestUri); #else return requestUri.OriginalString.StartsWith(baseUriWithSlash.OriginalString, StringComparison.Ordinal); #endif } ////// Determines whether the /// Candidate base URI. /// The specified Uri instance to test. ///Uri instance is a /// base of the specified Uri instance. /// true if the current Uri instance is a base of uri; otherwise, false. internal static bool UriInvariantInsensitiveIsBaseOf(Uri current, Uri uri) { Debug.Assert(current != null, "current != null"); Debug.Assert(uri != null, "uri != null"); Uri upperCurrent = CreateBaseComparableUri(current); Uri upperUri = CreateBaseComparableUri(uri); return UriUtil.IsBaseOf(upperCurrent, upperUri); } } ////// static xml utility function /// internal static partial class XmlUtil { ////// An initial nametable so that string comparisons during /// deserialization become reference comparisions /// ///nametable with element names used in application/atom+xml payload private static NameTable CreateAtomNameTable() { NameTable table = new NameTable(); table.Add(XmlConstants.AtomNamespace); table.Add(XmlConstants.DataWebNamespace); table.Add(XmlConstants.DataWebMetadataNamespace); table.Add(XmlConstants.AtomContentElementName); #if ASTORIA_CLIENT table.Add(XmlConstants.AtomContentSrcAttributeName); #endif table.Add(XmlConstants.AtomEntryElementName); table.Add(XmlConstants.AtomETagAttributeName); table.Add(XmlConstants.AtomFeedElementName); #if ASTORIA_CLIENT table.Add(XmlConstants.AtomIdElementName); #endif table.Add(XmlConstants.AtomInlineElementName); #if ASTORIA_CLIENT table.Add(XmlConstants.AtomLinkElementName); table.Add(XmlConstants.AtomLinkRelationAttributeName); #endif table.Add(XmlConstants.AtomNullAttributeName); table.Add(XmlConstants.AtomPropertiesElementName); table.Add(XmlConstants.AtomTitleElementName); table.Add(XmlConstants.AtomTypeAttributeName); table.Add(XmlConstants.XmlErrorCodeElementName); table.Add(XmlConstants.XmlErrorElementName); table.Add(XmlConstants.XmlErrorInnerElementName); table.Add(XmlConstants.XmlErrorMessageElementName); table.Add(XmlConstants.XmlErrorTypeElementName); return table; } ////// Creates a new XmlReader instance using the specified stream reader /// /// The stream reader from which you want to read /// The encoding of the stream ///XmlReader with the appropriate xml settings internal static XmlReader CreateXmlReader(Stream stream, Encoding encoding) { Debug.Assert(null != stream, "null stream"); XmlReaderSettings settings = new XmlReaderSettings(); settings.CheckCharacters = false; settings.CloseInput = true; settings.IgnoreWhitespace = true; settings.NameTable = XmlUtil.CreateAtomNameTable(); if (null == encoding) { // auto-detect the encoding return XmlReader.Create(stream, settings); } return XmlReader.Create(new StreamReader(stream, encoding), settings); } ////// Creates a new XmlWriter instance using the specified stream and writers the processing instruction /// with the given encoding value /// /// The stream to which you want to write /// Encoding that you want to specify in the reader settings as well as the processing instruction ///mlWriter with the appropriate xml settings and processing instruction internal static XmlWriter CreateXmlWriterAndWriteProcessingInstruction(Stream stream, Encoding encoding) { Debug.Assert(null != stream, "null stream"); Debug.Assert(null != encoding, "null encoding"); XmlWriterSettings settings = new XmlWriterSettings(); settings.CheckCharacters = false; settings.ConformanceLevel = ConformanceLevel.Fragment; settings.Encoding = encoding; settings.Indent = true; settings.NewLineHandling = NewLineHandling.Entitize; XmlWriter writer = XmlWriter.Create(stream, settings); writer.WriteProcessingInstruction("xml", "version=\"1.0\" encoding=\"" + encoding.WebName + "\" standalone=\"yes\""); return writer; } #if ASTORIA_CLIENT ////// get attribute value from specified namespace or empty namespace /// /// reader /// attributeName /// namespaceUri ///attribute value internal static string GetAttributeEx(this XmlReader reader, string attributeName, string namespaceUri) { return reader.GetAttribute(attributeName, namespaceUri) ?? reader.GetAttribute(attributeName); } #endif } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // //// static xml utility functions // //--------------------------------------------------------------------- #if ASTORIA_CLIENT namespace System.Data.Services.Client #else namespace System.Data.Services #endif { using System.Diagnostics; using System.Globalization; using System.IO; using System.Text; using System.Xml; ////// static uri utility functions /// internal static partial class UriUtil { ///Creates a URI suitable for host-agnostic comparison purposes. /// URI to compare. ///URI suitable for comparison. private static Uri CreateBaseComparableUri(Uri uri) { Debug.Assert(uri != null, "uri != null"); uri = new Uri(uri.OriginalString.ToUpper(CultureInfo.InvariantCulture), UriKind.RelativeOrAbsolute); UriBuilder builder = new UriBuilder(uri); builder.Host = "h"; builder.Port = 80; builder.Scheme = "http"; return builder.Uri; } ///Parse the atom link relation attribute value /// atom link relation attribute value ///the assocation name or null internal static string GetNameFromAtomLinkRelationAttribute(string value) { string name = null; if (!String.IsNullOrEmpty(value)) { Uri uri = null; try { uri = new Uri(value, UriKind.RelativeOrAbsolute); } catch (UriFormatException) { // ignore the exception, obviously we don't have our expected relation value } if ((null != uri) && uri.IsAbsoluteUri) { string unescaped = uri.GetComponents(UriComponents.AbsoluteUri, UriFormat.SafeUnescaped); if (unescaped.StartsWith(XmlConstants.DataWebRelatedNamespace, StringComparison.Ordinal)) { name = unescaped.Substring(XmlConstants.DataWebRelatedNamespace.Length); } } } return name; } ///is the serviceRoot the base of the request uri /// baseUriWithSlash /// requestUri ///true if the serviceRoot is the base of the request uri internal static bool IsBaseOf(Uri baseUriWithSlash, Uri requestUri) { #if !ASTORIA_LIGHT // Uri.IsBaseOf not available return baseUriWithSlash.IsBaseOf(requestUri); #else return requestUri.OriginalString.StartsWith(baseUriWithSlash.OriginalString, StringComparison.Ordinal); #endif } ////// Determines whether the /// Candidate base URI. /// The specified Uri instance to test. ///Uri instance is a /// base of the specified Uri instance. /// true if the current Uri instance is a base of uri; otherwise, false. internal static bool UriInvariantInsensitiveIsBaseOf(Uri current, Uri uri) { Debug.Assert(current != null, "current != null"); Debug.Assert(uri != null, "uri != null"); Uri upperCurrent = CreateBaseComparableUri(current); Uri upperUri = CreateBaseComparableUri(uri); return UriUtil.IsBaseOf(upperCurrent, upperUri); } } ////// static xml utility function /// internal static partial class XmlUtil { ////// An initial nametable so that string comparisons during /// deserialization become reference comparisions /// ///nametable with element names used in application/atom+xml payload private static NameTable CreateAtomNameTable() { NameTable table = new NameTable(); table.Add(XmlConstants.AtomNamespace); table.Add(XmlConstants.DataWebNamespace); table.Add(XmlConstants.DataWebMetadataNamespace); table.Add(XmlConstants.AtomContentElementName); #if ASTORIA_CLIENT table.Add(XmlConstants.AtomContentSrcAttributeName); #endif table.Add(XmlConstants.AtomEntryElementName); table.Add(XmlConstants.AtomETagAttributeName); table.Add(XmlConstants.AtomFeedElementName); #if ASTORIA_CLIENT table.Add(XmlConstants.AtomIdElementName); #endif table.Add(XmlConstants.AtomInlineElementName); #if ASTORIA_CLIENT table.Add(XmlConstants.AtomLinkElementName); table.Add(XmlConstants.AtomLinkRelationAttributeName); #endif table.Add(XmlConstants.AtomNullAttributeName); table.Add(XmlConstants.AtomPropertiesElementName); table.Add(XmlConstants.AtomTitleElementName); table.Add(XmlConstants.AtomTypeAttributeName); table.Add(XmlConstants.XmlErrorCodeElementName); table.Add(XmlConstants.XmlErrorElementName); table.Add(XmlConstants.XmlErrorInnerElementName); table.Add(XmlConstants.XmlErrorMessageElementName); table.Add(XmlConstants.XmlErrorTypeElementName); return table; } ////// Creates a new XmlReader instance using the specified stream reader /// /// The stream reader from which you want to read /// The encoding of the stream ///XmlReader with the appropriate xml settings internal static XmlReader CreateXmlReader(Stream stream, Encoding encoding) { Debug.Assert(null != stream, "null stream"); XmlReaderSettings settings = new XmlReaderSettings(); settings.CheckCharacters = false; settings.CloseInput = true; settings.IgnoreWhitespace = true; settings.NameTable = XmlUtil.CreateAtomNameTable(); if (null == encoding) { // auto-detect the encoding return XmlReader.Create(stream, settings); } return XmlReader.Create(new StreamReader(stream, encoding), settings); } ////// Creates a new XmlWriter instance using the specified stream and writers the processing instruction /// with the given encoding value /// /// The stream to which you want to write /// Encoding that you want to specify in the reader settings as well as the processing instruction ///mlWriter with the appropriate xml settings and processing instruction internal static XmlWriter CreateXmlWriterAndWriteProcessingInstruction(Stream stream, Encoding encoding) { Debug.Assert(null != stream, "null stream"); Debug.Assert(null != encoding, "null encoding"); XmlWriterSettings settings = new XmlWriterSettings(); settings.CheckCharacters = false; settings.ConformanceLevel = ConformanceLevel.Fragment; settings.Encoding = encoding; settings.Indent = true; settings.NewLineHandling = NewLineHandling.Entitize; XmlWriter writer = XmlWriter.Create(stream, settings); writer.WriteProcessingInstruction("xml", "version=\"1.0\" encoding=\"" + encoding.WebName + "\" standalone=\"yes\""); return writer; } #if ASTORIA_CLIENT ////// get attribute value from specified namespace or empty namespace /// /// reader /// attributeName /// namespaceUri ///attribute value internal static string GetAttributeEx(this XmlReader reader, string attributeName, string namespaceUri) { return reader.GetAttribute(attributeName, namespaceUri) ?? reader.GetAttribute(attributeName); } #endif } } // 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
- XmlCharCheckingReader.cs
- TextTabProperties.cs
- TextEditorSpelling.cs
- HttpApplicationStateBase.cs
- ColorContextHelper.cs
- MaskedTextBoxDesigner.cs
- EventLogPermissionAttribute.cs
- DelegateArgumentReference.cs
- SiteMapNodeItem.cs
- ImpersonationContext.cs
- Region.cs
- InputLanguageSource.cs
- EmptyStringExpandableObjectConverter.cs
- TypeToArgumentTypeConverter.cs
- SqlStatistics.cs
- ProfileInfo.cs
- Material.cs
- SolidColorBrush.cs
- AnimationException.cs
- GuidConverter.cs
- RawStylusActions.cs
- JsonFormatWriterGenerator.cs
- ScriptingJsonSerializationSection.cs
- configsystem.cs
- SimpleRecyclingCache.cs
- Label.cs
- LabelLiteral.cs
- XsdValidatingReader.cs
- GridViewSelectEventArgs.cs
- AliasExpr.cs
- ConfigXmlDocument.cs
- InputLanguageManager.cs
- DataGridViewTextBoxEditingControl.cs
- FieldBuilder.cs
- Geometry3D.cs
- PrintPreviewDialog.cs
- SchemaDeclBase.cs
- SmiEventSink.cs
- XsdDateTime.cs
- EventOpcode.cs
- ObjectCacheHost.cs
- XPathBinder.cs
- ClientScriptManager.cs
- FixedDocumentPaginator.cs
- AssemblyInfo.cs
- DecoratedNameAttribute.cs
- TerminatorSinks.cs
- SmiEventSink.cs
- Int32.cs
- UniqueID.cs
- ClientEventManager.cs
- XPathScanner.cs
- EventSource.cs
- CoTaskMemSafeHandle.cs
- AsymmetricSecurityProtocol.cs
- CharEntityEncoderFallback.cs
- WebBrowserBase.cs
- DataGridViewCellStyleBuilderDialog.cs
- DependentTransaction.cs
- HttpModuleActionCollection.cs
- MouseEvent.cs
- WebPartActionVerb.cs
- MenuItemCollection.cs
- Calendar.cs
- HandledEventArgs.cs
- CatalogZoneDesigner.cs
- WebPartConnectionsCancelVerb.cs
- ExpressionBindingCollection.cs
- XmlAttributeProperties.cs
- SqlBinder.cs
- ColorConvertedBitmapExtension.cs
- OleDbEnumerator.cs
- EventManager.cs
- TemplateField.cs
- WmlPanelAdapter.cs
- HwndStylusInputProvider.cs
- ConnectivityStatus.cs
- InputScope.cs
- MSAANativeProvider.cs
- FormViewDeletedEventArgs.cs
- XmlSchemaException.cs
- StateMachineWorkflowInstance.cs
- OleAutBinder.cs
- ContentType.cs
- FilteredDataSetHelper.cs
- EditCommandColumn.cs
- TypeResolvingOptionsAttribute.cs
- DummyDataSource.cs
- MsmqActivation.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- BaseTemplateBuildProvider.cs
- FloaterBaseParagraph.cs
- Positioning.cs
- StrokeDescriptor.cs
- AnimatedTypeHelpers.cs
- LinqDataSourceInsertEventArgs.cs
- TrackBarRenderer.cs
- DataServiceQueryException.cs
- OneToOneMappingSerializer.cs
- mediaclock.cs