Конфигурирование и настройка Microsoft ASP.NET



         

Создание собственного сложного обработчика раздела - часть 4


Для проверки того, что каждый узел XML в разделе не является комментарием или пробелом, используется следующий код.

If child.NodeType <> XmlNodeType.Comment And child.NodeType <> _ XmlNodeType.Whitespace Then

Если узел не является комментарием или пробелом, оператор case проверяет имя узла и в зависимости от его значения выполняет определенное действие с узлом. Например, если узел называется "License", значение узла добавляется в Hashtable в ключ "License".

Для трех других типов узлов (принтеры, электронная почта и источники данных) оператор case вызывает внешний метод, так как для каждого узла возможно наличие нескольких значений. Для их обработки внешний метод создает для каждого из этих параметров Hashtable, который добавляется в Hashtable настроек. Ниже приведен метод ReadSection, который создает Hashtable, содержащий все значения для каждого раздела. Чтобы разместить все имена значений из каждого раздела, третий параметр определяет строку атрибутов значения, которые должны использоваться для каждого раздела.

C#

private Hashtable ReadSection(object parent, XmlNode section, string sValueAttribute) { Hashtable parentConfig = (Hashtable) parent; Hashtable config; if (parentConfig != null) { config = (Hashtable) parentConfig.Clone(); } else { config = new Hashtable(); } foreach (XmlNode child in section.ChildNodes) { if(child.NodeType != XmlNodeType.Comment && child.NodeType != XmlNodeType.Whitespace) { config[child.Attributes.GetNamedItem("name").Value] = child.Attributes.GetNamedItem(sValueAttribute).Va lue; } } return config; }

VB.NET

Private Function ReadSection(parent As Object, section As XmlNode, _ sValueAttribute as string) As Hashtable Dim parentConfig As Hashtable = CType(parent, Hashtable) Dim config As Hashtable If Not (parentConfig Is Nothing) Then config = CType(parentConfig.Clone(), Hashtable) Else config = New Hashtable() End If Dim child As XmlNode For Each child In section.ChildNodes If child.NodeType <> XmlNodeType.Comment And _ child.NodeType <>XmlNodeType.Whitespace Then config(child.Attributes.GetNamedItem("name").Value) = _ child.Attributes.GetNamedItem(sValueAttribute).Value End If Next child Return config End Function




Содержание  Назад  Вперед