Files
ResourceString.Net.Contract/ResourceString.Net.Logic/Parsers/Resx/Parser.cs
2023-02-26 19:03:30 +01:00

39 lines
955 B
C#

using ResourceString.Net.Logic.DomainObjects.Resx;
using System.Linq;
using System.Xml;
namespace ResourceString.Net.Logic.Parsers.Resx;
internal static class Parser
{
public static Option<File> TryParse(string xmlString)
{
var doc = new XmlDocument();
try
{
doc.LoadXml(xmlString);
}
catch
{
return Option<File>.None;
}
var resources = doc.SelectNodes("descendant::data").OfType<XmlElement>().Select((i, _) =>
{
var name = i.GetAttribute("name");
var type = i.GetAttribute("type");
var value = i.SelectSingleNode("descendant::value")?.InnerXml;
return new Resource(name, value ?? string.Empty)
{
Type = type
};
}).ToArray();
return resources.Any()
? Option<File>.Some(new File(resources))
: Option<File>.None;
}
}