public SimpleXmlNamespaceResolver(XDocument document)
{
if (document?.Root == null)
{
return;
}
foreach (var element in document.Root.DescendantsAndSelf())
{
var elementNamespace = element.Name.Namespace.ToString();
if(!string.IsNullOrWhiteSpace(element.Name.NamespaceName) && !_namespaces.ContainsKey(elementNamespace))
{
var elementNamespacePrefix = GetNamespacePrefix(element);
_namespaces.Add(elementNamespace, elementNamespacePrefix);
}
foreach(var attribute in element.Attributes())
{
string attributeNamespace;
string attributeNamespacePrefix;
if(attribute.IsNamespaceDeclaration)
{
attributeNamespace = attribute.Value;
attributeNamespacePrefix = GetNamespacePrefixFromXmlnsDeclaration(attribute);
}
else
{
attributeNamespace = attribute.Name.Namespace.ToString();
attributeNamespacePrefix = GetNamespacePrefix(attribute);
}
if(!string.IsNullOrEmpty(attributeNamespace) && !_namespaces.ContainsKey(attributeNamespace))
{
_namespaces.Add(attributeNamespace, attributeNamespacePrefix);
}
}
}
}