|  | @@ -1,12 +1,16 @@
 | 
	
		
			
				|  |  |  using System;
 | 
	
		
			
				|  |  | +using System.Collections.Generic;
 | 
	
		
			
				|  |  |  using System.IO;
 | 
	
		
			
				|  |  |  using System.Text;
 | 
	
		
			
				|  |  | +using System.Xml;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  namespace PSDText
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      public class PSDText
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |          private readonly string _xmlData;
 | 
	
		
			
				|  |  | +        private readonly XmlNamespaceManager _ns = new XmlNamespaceManager(new NameTable());
 | 
	
		
			
				|  |  | +        public List<TextData> TextData;
 | 
	
		
			
				|  |  |          private string Readxmpmeta(string path)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              var sb = new StringBuilder(1000);
 | 
	
	
		
			
				|  | @@ -35,12 +39,52 @@ namespace PSDText
 | 
	
		
			
				|  |  |              return sb.ToString();
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        private void AddXMLNamespaces()
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            _ns.AddNamespace("x", "adobe:ns:meta/");
 | 
	
		
			
				|  |  | +            _ns.AddNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
 | 
	
		
			
				|  |  | +            _ns.AddNamespace("photoshop", "http://ns.adobe.com/photoshop/1.0/");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        private XmlDocument ReadXML()
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            var xml = new XmlDocument();
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            using (var sr = new StringReader(_xmlData))
 | 
	
		
			
				|  |  | +            using (var reader = XmlReader.Create(sr))
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                xml.Load(reader);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            return xml;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public List<TextData> GetTextData()
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            var xml = ReadXML();
 | 
	
		
			
				|  |  | +            var data = new List<TextData>();
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            var textNodes =
 | 
	
		
			
				|  |  | +                xml.SelectNodes("/x:xmpmeta/rdf:RDF/rdf:Description/photoshop:TextLayers/rdf:Bag/rdf:li", _ns);
 | 
	
		
			
				|  |  | +            foreach (XmlNode textNode in textNodes)
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                var name = textNode.SelectSingleNode("./photoshop:LayerName", _ns)?.InnerText;
 | 
	
		
			
				|  |  | +                var text = textNode.SelectSingleNode("./photoshop:LayerText", _ns)?.InnerText;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                data.Add(new TextData{Name = name, Text = text});
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            return data;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          public PSDText(string path)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              if (!File.Exists(path))
 | 
	
		
			
				|  |  |                  throw new Exception($"File {path} doesn't exist!");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              _xmlData = Readxmpmeta(path);
 | 
	
		
			
				|  |  | +            AddXMLNamespaces();
 | 
	
		
			
				|  |  | +            TextData = GetTextData();
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 |