aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Extensions/XmlExtensions.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller/Extensions/XmlExtensions.cs')
-rw-r--r--MediaBrowser.Controller/Extensions/XmlExtensions.cs201
1 files changed, 201 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/Extensions/XmlExtensions.cs b/MediaBrowser.Controller/Extensions/XmlExtensions.cs
new file mode 100644
index 000000000..00bee7d1d
--- /dev/null
+++ b/MediaBrowser.Controller/Extensions/XmlExtensions.cs
@@ -0,0 +1,201 @@
+using System;
+using System.Globalization;
+using System.Xml;
+
+namespace MediaBrowser.Controller.Extensions
+{
+ /// <summary>
+ /// Class XmlExtensions
+ /// </summary>
+ public static class XmlExtensions
+ {
+
+ /// <summary>
+ /// Safes the get int32.
+ /// </summary>
+ /// <param name="doc">The doc.</param>
+ /// <param name="path">The path.</param>
+ /// <returns>System.Int32.</returns>
+ public static int SafeGetInt32(this XmlDocument doc, string path)
+ {
+ return SafeGetInt32(doc, path, 0);
+ }
+
+ /// <summary>
+ /// Safes the get int32.
+ /// </summary>
+ /// <param name="doc">The doc.</param>
+ /// <param name="path">The path.</param>
+ /// <param name="defaultInt">The default int.</param>
+ /// <returns>System.Int32.</returns>
+ public static int SafeGetInt32(this XmlDocument doc, string path, int defaultInt)
+ {
+ XmlNode rvalNode = doc.SelectSingleNode(path);
+ if (rvalNode != null && rvalNode.InnerText.Length > 0)
+ {
+ int rval;
+ if (Int32.TryParse(rvalNode.InnerText, out rval))
+ {
+ return rval;
+ }
+
+ }
+ return defaultInt;
+ }
+
+ /// <summary>
+ /// The _us culture
+ /// </summary>
+ private static readonly CultureInfo _usCulture = new CultureInfo("en-US");
+
+ /// <summary>
+ /// Safes the get single.
+ /// </summary>
+ /// <param name="doc">The doc.</param>
+ /// <param name="path">The path.</param>
+ /// <param name="minValue">The min value.</param>
+ /// <param name="maxValue">The max value.</param>
+ /// <returns>System.Single.</returns>
+ public static float SafeGetSingle(this XmlDocument doc, string path, float minValue, float maxValue)
+ {
+ XmlNode rvalNode = doc.SelectSingleNode(path);
+ if (rvalNode != null && rvalNode.InnerText.Length > 0)
+ {
+ float rval;
+ // float.TryParse is local aware, so it can be probamatic, force us culture
+ if (float.TryParse(rvalNode.InnerText, NumberStyles.AllowDecimalPoint, _usCulture, out rval))
+ {
+ if (rval >= minValue && rval <= maxValue)
+ {
+ return rval;
+ }
+ }
+
+ }
+ return minValue;
+ }
+
+
+ /// <summary>
+ /// Safes the get string.
+ /// </summary>
+ /// <param name="doc">The doc.</param>
+ /// <param name="path">The path.</param>
+ /// <returns>System.String.</returns>
+ public static string SafeGetString(this XmlDocument doc, string path)
+ {
+ return SafeGetString(doc, path, null);
+ }
+
+ /// <summary>
+ /// Safes the get string.
+ /// </summary>
+ /// <param name="doc">The doc.</param>
+ /// <param name="path">The path.</param>
+ /// <param name="defaultString">The default string.</param>
+ /// <returns>System.String.</returns>
+ public static string SafeGetString(this XmlDocument doc, string path, string defaultString)
+ {
+ XmlNode rvalNode = doc.SelectSingleNode(path);
+ if (rvalNode != null && rvalNode.InnerText.Trim().Length > 0)
+ {
+ return rvalNode.InnerText;
+ }
+ return defaultString;
+ }
+
+ /// <summary>
+ /// Safes the get string.
+ /// </summary>
+ /// <param name="doc">The doc.</param>
+ /// <param name="path">The path.</param>
+ /// <returns>System.String.</returns>
+ public static string SafeGetString(this XmlNode doc, string path)
+ {
+ return SafeGetString(doc, path, null);
+ }
+
+ /// <summary>
+ /// Safes the get string.
+ /// </summary>
+ /// <param name="doc">The doc.</param>
+ /// <param name="path">The path.</param>
+ /// <param name="defaultValue">The default value.</param>
+ /// <returns>System.String.</returns>
+ public static string SafeGetString(this XmlNode doc, string path, string defaultValue)
+ {
+ XmlNode rvalNode = doc.SelectSingleNode(path);
+ if (rvalNode != null && rvalNode.InnerText.Length > 0)
+ {
+ return rvalNode.InnerText;
+ }
+ return defaultValue;
+ }
+
+ /// <summary>
+ /// Reads the string safe.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ /// <returns>System.String.</returns>
+ public static string ReadStringSafe(this XmlReader reader)
+ {
+ var val = reader.ReadElementContentAsString();
+
+ return string.IsNullOrWhiteSpace(val) ? null : val;
+ }
+
+ /// <summary>
+ /// Reads the value safe.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ /// <returns>System.String.</returns>
+ public static string ReadValueSafe(this XmlReader reader)
+ {
+ reader.Read();
+
+ var val = reader.Value;
+
+ return string.IsNullOrWhiteSpace(val) ? null : val;
+ }
+
+ /// <summary>
+ /// Reads a float from the current element of an XmlReader
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ /// <returns>System.Single.</returns>
+ public static float ReadFloatSafe(this XmlReader reader)
+ {
+ string valueString = reader.ReadElementContentAsString();
+
+ float value = 0;
+
+ if (!string.IsNullOrWhiteSpace(valueString))
+ {
+ // float.TryParse is local aware, so it can be probamatic, force us culture
+ float.TryParse(valueString, NumberStyles.AllowDecimalPoint, _usCulture, out value);
+ }
+
+ return value;
+ }
+
+ /// <summary>
+ /// Reads an int from the current element of an XmlReader
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ /// <returns>System.Int32.</returns>
+ public static int ReadIntSafe(this XmlReader reader)
+ {
+ string valueString = reader.ReadElementContentAsString();
+
+ int value = 0;
+
+ if (!string.IsNullOrWhiteSpace(valueString))
+ {
+
+ int.TryParse(valueString, out value);
+ }
+
+ return value;
+ }
+ }
+} \ No newline at end of file