The Labs \ Source Viewer \ SSCLI \ System.Xml \ XmlDeclaration

  1. //------------------------------------------------------------------------------
  2. // <copyright file="XmlDeclaration.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. namespace System.Xml
  16. {
  17.     using System.Text;
  18.     using System.Diagnostics;
  19.    
  20.     // Represents the xml declaration nodes: <?xml version='1.0' ...?>
  21.     public class XmlDeclaration : XmlLinkedNode
  22.     {
  23.        
  24.         const string YES = "yes";
  25.         const string NO = "no";
  26.         const string VERNUM = "1.0";
  27.        
  28.         private string encoding;
  29.         private string standalone;
  30.        
  31.         protected internal XmlDeclaration(string version, string encoding, string standalone, XmlDocument doc) : base(doc)
  32.         {
  33.             if (version != VERNUM)
  34.                 throw new ArgumentException(Res.GetString(Res.Xdom_Version));
  35.             if ((standalone != null) && (standalone.Length > 0))
  36.                 if ((standalone != YES) && (standalone != NO))
  37.                     throw new ArgumentException(Res.GetString(Res.Xdom_standalone, standalone));
  38.             this.Encoding = encoding;
  39.             this.Standalone = standalone;
  40.         }
  41.        
  42.        
  43.         // The version attribute (1.0) for <?xml version= '1.0' ... ?>
  44.         public string Version {
  45.             get { return VERNUM; }
  46.         }
  47.        
  48.         // Specifies the value of the encoding attribute, as for
  49.         // <?xml version= '1.0' encoding= 'UTF-8' ?>
  50.         public string Encoding {
  51.             get { return this.encoding; }
  52.             set { this.encoding = ((value == null) ? String.Empty : value); }
  53.         }
  54.        
  55.         // Specifies the value of the standalone attribute.
  56.         public string Standalone {
  57.             get { return this.standalone; }
  58.             set {
  59.                 if (value == null)
  60.                     this.standalone = String.Empty;
  61.                 else if (value.Length == 0 || value == YES || value == NO)
  62.                     this.standalone = value;
  63.                 else
  64.                     throw new ArgumentException(Res.GetString(Res.Xdom_standalone, value));
  65.             }
  66.         }
  67.        
  68.         public override string Value {
  69.             get { return InnerText; }
  70.             set { InnerText = value; }
  71.         }
  72.        
  73.        
  74.         // Gets or sets the concatenated values of the node and
  75.         // all its children.
  76.         public override string InnerText {
  77.             get {
  78.                 StringBuilder strb = new StringBuilder("version=\"" + Version + "\"");
  79.                 if (Encoding.Length > 0) {
  80.                     strb.Append(" encoding=\"");
  81.                     strb.Append(Encoding);
  82.                     strb.Append("\"");
  83.                 }
  84.                 if (Standalone.Length > 0) {
  85.                     strb.Append(" standalone=\"");
  86.                     strb.Append(Standalone);
  87.                     strb.Append("\"");
  88.                 }
  89.                 return strb.ToString();
  90.             }
  91.            
  92.             set {
  93.                 string tempVersion = null;
  94.                 string tempEncoding = null;
  95.                 string tempStandalone = null;
  96.                 string orgEncoding = this.Encoding;
  97.                 string orgStandalone = this.Standalone;
  98.                
  99.                 XmlLoader.ParseXmlDeclarationValue(value, out tempVersion, out tempEncoding, out tempStandalone);
  100.                
  101.                 try {
  102.                     if (tempVersion != null && tempVersion != VERNUM)
  103.                         throw new ArgumentException(Res.GetString(Res.Xdom_Version));
  104.                     if (tempEncoding != null)
  105.                         Encoding = tempEncoding;
  106.                     if (tempStandalone != null)
  107.                         Standalone = tempStandalone;
  108.                 }
  109.                 catch {
  110.                     Encoding = orgEncoding;
  111.                     Standalone = orgStandalone;
  112.                     throw;
  113.                 }
  114.             }
  115.         }
  116.        
  117.         //override methods and properties from XmlNode
  118.        
  119.         // Gets the name of the node.
  120.         public override string Name {
  121.             get { return "xml"; }
  122.         }
  123.        
  124.         // Gets the name of the current node without the namespace prefix.
  125.         public override string LocalName {
  126.             get { return Name; }
  127.         }
  128.        
  129.         // Gets the type of the current node.
  130.         public override XmlNodeType NodeType {
  131.             get { return XmlNodeType.XmlDeclaration; }
  132.         }
  133.        
  134.         // Creates a duplicate of this node.
  135.         public override XmlNode CloneNode(bool deep)
  136.         {
  137.             Debug.Assert(OwnerDocument != null);
  138.             return OwnerDocument.CreateXmlDeclaration(Version, Encoding, Standalone);
  139.         }
  140.        
  141.         // Saves the node to the specified XmlWriter.
  142.         public override void WriteTo(XmlWriter w)
  143.         {
  144.             w.WriteProcessingInstruction(Name, InnerText);
  145.         }
  146.        
  147.        
  148.         // Saves all the children of the node to the specified XmlWriter.
  149.         public override void WriteContentTo(XmlWriter w)
  150.         {
  151.             // Intentionally do nothing since the node doesn't have children.
  152.         }
  153.     }
  154. }

Developer Fusion