Guest User

Untitled

a guest
Nov 24th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.28 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Web;
  5. using System.Xml;
  6.  
  7. namespace ContentManagement
  8. {
  9.     /// <summary>
  10.     /// Denna klass jobbar mot en XML fil för att hantera innehåll. Letar som standard efter en fil med namnet Content.xml i katalogerna AppData eller Bin.
  11.     /// </summary>
  12.     public class ContentManager
  13.     {
  14.         private string _xmlFileName = "Content.xml";
  15.         private XmlDocument _xmlDocument;
  16.         private XmlNode _rootNode;
  17.  
  18.         public ContentManager() : this(null)
  19.         {
  20.            
  21.         }
  22.  
  23.         public ContentManager(string documentPath)
  24.         {
  25.             DocumentPath = documentPath;
  26.             LoadXml();
  27.         }
  28.  
  29.         /// <summary>
  30.         /// Namnet på den XML fil som ska användas. Standardvärde är Content.xml.
  31.         /// </summary>
  32.         public string XmlFileName
  33.         {
  34.             get { return _xmlFileName; }
  35.             set { _xmlFileName = value; }
  36.         }
  37.        
  38.         /// <summary>
  39.         /// Använd för att ange en specifik sökväg till xml dokumentet,
  40.         /// </summary>
  41.         public string DocumentPath { get; set; }
  42.  
  43.         /// <summary>
  44.         /// Hämtar ett ContentItem.
  45.         /// </summary>
  46.         /// <param name="xpath">XPath uttryck, exempelvis "//messages/message" för att hämta ett meddelande.</param>
  47.         /// <returns></returns>
  48.         public ContentItem GetSingle(string xpath)
  49.         {
  50.             ContentItem contentItem = null;
  51.             XmlNode xmlNode = _rootNode.SelectSingleNode(xpath);
  52.  
  53.             if (xmlNode != null)
  54.             {
  55.                 contentItem = CreateContentFromXmlNode(xmlNode);
  56.             }
  57.  
  58.             return contentItem;
  59.         }
  60.  
  61.         /// <summary>
  62.         /// Hämtar flera ContentItems.
  63.         /// </summary>
  64.         /// <param name="xpath">XPath uttryck, exempelvis "//messages/message" för att hämta alla meddelanden.</param>
  65.         /// <returns></returns>
  66.         public IList<ContentItem> GetMany(string xpath)
  67.         {
  68.             IList<ContentItem> contentItems = new List<ContentItem>();
  69.             XmlNodeList xmlNodes = _rootNode.SelectNodes(xpath);
  70.  
  71.             if (xmlNodes != null)
  72.             {
  73.                 foreach (XmlNode xmlNode in xmlNodes)
  74.                 {
  75.                     ContentItem contentItem = CreateContentFromXmlNode(xmlNode);
  76.                     contentItems.Add(contentItem);
  77.                 }
  78.             }
  79.  
  80.             return contentItems;
  81.         }
  82.  
  83.         public IList<ContentItem> GetChildren(ContentItem contentItem)
  84.         {
  85.             IList<ContentItem> children = new List<ContentItem>();
  86.  
  87.             return children;
  88.         }
  89.  
  90.         private ContentItem CreateContentFromXmlNode(XmlNode xmlNode)
  91.         {
  92.             ContentItem contentItem = new ContentItem();
  93.             contentItem.Name = xmlNode.Name;
  94.             contentItem.Value = xmlNode.InnerText;
  95.             return contentItem;
  96.         }
  97.  
  98.         private void LoadXml()
  99.         {
  100.             _xmlDocument = new XmlDocument();
  101.            
  102.             if (string.IsNullOrEmpty(DocumentPath))
  103.             {
  104.                 DocumentPath = GetAppDataFolderFilePath();
  105.             }
  106.  
  107.             if(string.IsNullOrEmpty(DocumentPath))
  108.             {
  109.                 throw new ArgumentException("Egenskapen DocumentPath är tom och mappen App_Data kunde inte hittas. Någon av dessa måste åtgärdas.");
  110.             }
  111.  
  112.             LoadXmlFromPath(DocumentPath);
  113.  
  114.             _rootNode = _xmlDocument.DocumentElement;
  115.         }
  116.  
  117.         private void LoadXmlFromPath(string path)
  118.         {
  119.             try
  120.             {
  121.                 _xmlDocument.Load(path);
  122.             }
  123.             catch (FileNotFoundException ex)
  124.             {
  125.                 throw new FileNotFoundException("Kunde inte någon fil för sökvägen " + path, ex);
  126.             }
  127.         }
  128.  
  129.         private string GetAppDataFolderFilePath()
  130.         {
  131.             string path;
  132.             try
  133.             {
  134.                 path = Path.Combine(HttpContext.Current.Server.MapPath("App_Data"), XmlFileName);
  135.             }
  136.             catch
  137.             {
  138.                 path = string.Empty;
  139.             }
  140.             return path;
  141.         }
  142.        
  143.     }
  144. }
Add Comment
Please, Sign In to add comment