using System;
using System.Xml;
using System.Collections.Specialized;
namespace IBatisNet.Common.Xml
{
///
/// Summary description for NodeUtils.
///
public sealed class NodeUtils
{
///
/// Searches for the attribute with the specified name in this attributes list.
///
///
/// The key
///
public static string GetStringAttribute(NameValueCollection attributes, string name)
{
string value = attributes[name];
if (value == null)
{
return string.Empty;
}
else
{
return value;
}
}
///
/// Searches for the attribute with the specified name in this attributes list.
///
///
/// The key
/// The default value to be returned if the attribute is not found.
///
public static string GetStringAttribute(NameValueCollection attributes, string name, string def)
{
string value = attributes[name];
if (value == null)
{
return def;
}
else
{
return value;
}
}
///
/// Searches for the attribute with the specified name in this attributes list.
///
///
/// The key
/// The default value to be returned if the attribute is not found.
///
public static byte GetByteAttribute(NameValueCollection attributes, string name, byte def)
{
string value = attributes[name];
if (value == null)
{
return def;
}
else
{
return XmlConvert.ToByte(value);
}
}
///
/// Searches for the attribute with the specified name in this attributes list.
///
///
/// The key
/// The default value to be returned if the attribute is not found.
///
public static int GetIntAttribute(NameValueCollection attributes, string name, int def)
{
string value = attributes[name];
if (value == null)
{
return def;
}
else
{
return XmlConvert.ToInt32(value);
}
}
///
/// Searches for the attribute with the specified name in this attributes list.
///
///
/// The key
/// The default value to be returned if the attribute is not found.
///
public static bool GetBooleanAttribute(NameValueCollection attributes, string name, bool def)
{
string value = attributes[name];
if (value == null)
{
return def;
}
else
{
return XmlConvert.ToBoolean(value);
}
}
///
///
///
///
///
public static NameValueCollection ParseAttributes(XmlNode node)
{
return ParseAttributes(node, null);
}
///
///
///
///
///
///
public static NameValueCollection ParseAttributes(XmlNode node, NameValueCollection variables)
{
NameValueCollection attributes = new NameValueCollection();
int count = node.Attributes.Count;
for (int i = 0; i < count; i++)
{
XmlAttribute attribute = node.Attributes[i];
String value = ParsePropertyTokens(attribute.Value, variables);
attributes.Add(attribute.Name, value);
}
return attributes;
}
///
/// Replace properties by their values in the given string
///
///
///
///
public static string ParsePropertyTokens(string str, NameValueCollection properties)
{
string OPEN = "${";
string CLOSE = "}";
string newString = str;
if (newString != null && properties != null)
{
int start = newString.IndexOf(OPEN);
int end = newString.IndexOf(CLOSE);
while (start > -1 && end > start)
{
string prepend = newString.Substring(0, start);
string append = newString.Substring(end + CLOSE.Length);
int index = start + OPEN.Length;
string propName = newString.Substring(index, end-index);
string propValue = properties.Get(propName);
if (propValue == null)
{
newString = prepend + propName + append;
}
else
{
newString = prepend + propValue + append;
}
start = newString.IndexOf(OPEN);
end = newString.IndexOf(CLOSE);
}
}
return newString;
}
}
}