2 // System.Xml.XmlConvert
\r
5 // Dwivedi, Ajay kumar (Adwiv@Yahoo.com)
\r
6 // Gonzalo Paniagua Javier (gonzalo@ximian.com)
\r
8 // (C) 2002 Ximian, Inc (http://www.ximian.com)
\r
12 using System.Globalization;
\r
14 namespace System.Xml {
\r
16 public class XmlConvert {
\r
18 static string encodedColon = "_x003A_";
\r
23 private static string TryDecoding (string s)
\r
25 if (s == null || s.Length < 6)
\r
30 c = (char) Int32.Parse (s.Substring (1, 4), NumberStyles.HexNumber);
\r
32 return s [0] + DecodeName (s.Substring (1));
\r
36 return c.ToString ();
\r
37 return c + DecodeName (s.Substring (6));
\r
40 public static string DecodeName (string name)
\r
42 if (name == null || name.Length == 0)
\r
45 int pos = name.IndexOf ('_');
\r
46 if (pos == -1 || pos + 6 >= name.Length)
\r
49 if (Char.ToUpper (name [pos + 1]) != 'X' || name [pos + 6] != '_')
\r
50 return name [0] + DecodeName (name.Substring (1));
\r
52 return name.Substring (0, pos) + TryDecoding (name.Substring (pos + 1));
\r
55 public static string EncodeLocalName (string name)
\r
57 string encoded = EncodeName (name);
\r
58 int pos = encoded.IndexOf (':');
\r
61 return encoded.Replace (":", encodedColon);
\r
64 private static bool IsInvalid (char c, bool firstOnlyLetter)
\r
66 if (c == ':') // Special case. allowed in EncodeName, but encoded in EncodeLocalName
\r
69 if (firstOnlyLetter && !Char.IsLetter (c) && c != '_')
\r
72 return !Char.IsLetterOrDigit (c);
\r
75 private static string EncodeName (string name, bool nmtoken)
\r
77 StringBuilder sb = new StringBuilder ();
\r
78 int length = name.Length;
\r
79 for (int i = 0; i < length; i++) {
\r
81 if (c != '_' || i + 6 >= length) {
\r
82 bool firstOnlyLetter = (i == 0 && !nmtoken);
\r
83 if (IsInvalid (c, firstOnlyLetter)) {
\r
84 sb.AppendFormat ("_x{0:X4}_", (int) c);
\r
88 if (Char.ToUpper (name [i + 1]) == 'X' && name [i + 6] == '_') {
\r
89 string decoded = TryDecoding (name.Substring (i + 1, 6));
\r
90 if (decoded.Length == 1) {
\r
91 sb.AppendFormat ("_x{0:X4}_", (int) c);
\r
98 return sb.ToString ();
\r
101 public static string EncodeName (string name)
\r
103 return EncodeName (name, false);
\r
106 public static string EncodeNmToken(string name)
\r
108 return EncodeName (name, true);
\r
111 // {true, false, 1, 0}
\r
112 public static bool ToBoolean(string s)
\r
126 throw new FormatException(s + " is not a valid boolean value");
\r
130 public static byte ToByte(string s)
\r
132 return Byte.Parse(s, CultureInfo.InvariantCulture);
\r
135 public static char ToChar(string s)
\r
137 return Char.Parse(s);
\r
140 public static DateTime ToDateTime(string s)
\r
142 return DateTime.Parse(s);
\r
145 public static DateTime ToDateTime(string s, string format)
\r
147 DateTimeFormatInfo d = new DateTimeFormatInfo();
\r
148 d.FullDateTimePattern = format;
\r
149 return DateTime.Parse(s, d);
\r
152 public static DateTime ToDateTime(string s, string[] formats)
\r
154 DateTimeStyles style = DateTimeStyles.AllowLeadingWhite |
\r
155 DateTimeStyles.AllowTrailingWhite;
\r
156 return DateTime.ParseExact (s, formats, DateTimeFormatInfo.InvariantInfo, style);
\r
159 public static Decimal ToDecimal(string s)
\r
161 return Decimal.Parse(s, CultureInfo.InvariantCulture);
\r
164 public static double ToDouble(string s)
\r
166 return Double.Parse(s, CultureInfo.InvariantCulture);
\r
169 public static Guid ToGuid(string s)
\r
171 return new Guid(s);
\r
174 public static short ToInt16(string s)
\r
176 return Int16.Parse(s, CultureInfo.InvariantCulture);
\r
179 public static int ToInt32(string s)
\r
181 return Int32.Parse(s, CultureInfo.InvariantCulture);
\r
184 public static long ToInt64(string s)
\r
186 return Int64.Parse(s, CultureInfo.InvariantCulture);
\r
189 [CLSCompliant (false)]
\r
190 public static SByte ToSByte(string s)
\r
192 return SByte.Parse(s, CultureInfo.InvariantCulture);
\r
195 public static float ToSingle(string s)
\r
197 return Single.Parse(s, CultureInfo.InvariantCulture);
\r
200 public static string ToString(Guid value)
\r
202 return value.ToString("D",CultureInfo.InvariantCulture);
\r
205 public static string ToString(int value)
\r
207 return value.ToString(CultureInfo.InvariantCulture);
\r
210 public static string ToString(short value)
\r
212 return value.ToString(CultureInfo.InvariantCulture);
\r
215 public static string ToString(byte value)
\r
217 return value.ToString(CultureInfo.InvariantCulture);
\r
220 public static string ToString(long value)
\r
222 return value.ToString(CultureInfo.InvariantCulture);
\r
225 public static string ToString(char value)
\r
227 return value.ToString(CultureInfo.InvariantCulture);
\r
230 public static string ToString(bool value)
\r
232 return value.ToString(CultureInfo.InvariantCulture);
\r
235 [CLSCompliant (false)]
\r
236 public static string ToString(SByte value)
\r
238 return value.ToString(CultureInfo.InvariantCulture);
\r
240 public static string ToString(Decimal value)
\r
242 return value.ToString(CultureInfo.InvariantCulture);
\r
245 [CLSCompliant (false)]
\r
246 public static string ToString(UInt64 value)
\r
248 return value.ToString(CultureInfo.InvariantCulture);
\r
250 public static string ToString(TimeSpan value)
\r
252 return value.ToString();
\r
254 public static string ToString(double value)
\r
256 return value.ToString(CultureInfo.InvariantCulture);
\r
258 public static string ToString(float value)
\r
260 return value.ToString(CultureInfo.InvariantCulture);
\r
263 [CLSCompliant (false)]
\r
264 public static string ToString(UInt32 value)
\r
266 return value.ToString(CultureInfo.InvariantCulture);
\r
269 [CLSCompliant (false)]
\r
270 public static string ToString(UInt16 value)
\r
272 return value.ToString(CultureInfo.InvariantCulture);
\r
274 public static string ToString(DateTime value)
\r
276 return value.ToString(CultureInfo.InvariantCulture);
\r
278 public static string ToString(DateTime value, string format)
\r
280 return value.ToString(format, CultureInfo.InvariantCulture);
\r
282 public static TimeSpan ToTimeSpan(string s)
\r
284 return TimeSpan.Parse(s);
\r
287 [CLSCompliant (false)]
\r
288 public static UInt16 ToUInt16(string s)
\r
290 return UInt16.Parse(s, CultureInfo.InvariantCulture);
\r
293 [CLSCompliant (false)]
\r
294 public static UInt32 ToUInt32(string s)
\r
296 return UInt32.Parse(s, CultureInfo.InvariantCulture);
\r
299 [CLSCompliant (false)]
\r
300 public static UInt64 ToUInt64(string s)
\r
302 return UInt64.Parse(s, CultureInfo.InvariantCulture);
\r
305 public static string VerifyName(string name)
\r
309 throw new ArgumentNullException("name");
\r
311 if(XmlConstructs.IsValidName(name, out innerEx))
\r
314 throw new XmlException("'"+name+"' is not a valid XML Name",null);
\r
317 public static string VerifyNCName(string ncname)
\r
321 throw new ArgumentNullException("ncname");
\r
323 if(XmlConstructs.IsValidName(ncname, out innerEx))
\r
326 throw new XmlException("'"+ncname+"' is not a valid XML NCName",innerEx);
\r