XmlDoc_Extensions.cs
    
    
    
    
    
        Home
            /
ToolPack1                    /
Tools                    /
Tools.XMLExtensions                    /
                    XmlDoc_Extensions.cs
    
    
            
            using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
namespace Tools.XMLExtensions
{
    public static class XmlDoc_Extensions
    {
        /// <summary>
        /// Пространство имен по умолчанию
        /// </summary>
        /// <param name="NS_Prefix">Префикс для пространства</param>
        public static XmlNamespaceManager DefaultNamespace(this XmlDocument doc, string NS_Prefix = "x")
        {
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
            nsmgr.AddNamespace(NS_Prefix, doc.DocumentElement.NamespaceURI);
            return nsmgr;
        }
        /// <summary>
        /// Выполнить XPath запрос используя стандартное пространство имен 
        /// </summary>
        /// <param name="XPath"></param>
        /// <param name="NS_Prefix">Префикс для пространства</param>
        public static List<XmlNode> SelectNodes_WithNS(this XmlNode xelem, string XPath, string NS_Prefix = "x")
        {
            return xelem
                .SelectNodes(XPath, xelem.OwnerDocument.DefaultNamespace(NS_Prefix))
                .ToList();
        }
        /// <summary>
        /// Преобразование в List
        /// </summary>
        public static List<XmlNode> ToList(this XmlNodeList xelems)
        {
            List<XmlNode> res = new List<XmlNode>(xelems.Count);
            foreach (XmlNode elem in xelems)
            {
                res.Add(elem);
            }
            return res;
        }
        /// <summary>
        /// Путь от корня документа
        /// </summary>
        public static List<XmlNode> Path(this XmlNode xelem)
        {
            List<XmlNode> res = new List<XmlNode>();
            for (XmlNode elem = xelem; elem != null; elem = elem.ParentNode)
            {
                res.Add(elem);
            }
            res.Reverse();
            return res;
        }
        /// <summary>
        /// Путь от корня документа
        /// </summary>
        /// <param name="split">Символ разделитель</param>
        public static string PathString(this XmlNode xelem, char split = '\\')
        {
            StringBuilder res = new StringBuilder();
            xelem.Path()
                .ForEach(e => res.Append(split + e.LocalName));
            return res.ToString();
        }
    }
}