/// <summary>
/// Creates a <see cref="XmlNamespaceManager"/> for <paramref name="document"/>.
/// Namespaces declared in the document node are automatically added.
/// The default namespace is given the prefix 'ns'.
/// </summary>
public static XmlNamespaceManager CreateNamespaceManager(this XmlDocument document)
{
var manager = new XmlNamespaceManager(document.NameTable);
foreach (XmlNode node in document.SelectNodes("//node()"))
{
if (node is XmlElement)
{
var element = node as XmlElement;
foreach (XmlAttribute attribute in element.Attributes)
{
if (attribute.Name == "xmlns")
{
// The first default namespace wins
// (since using multiple default namespaces in a single file is not considered a good practice)
if (!manager.HasNamespace("ns"))
{
manager.AddNamespace("ns", attribute.Value);
}
}
if (attribute.Prefix == "xmlns")
{
manager.AddNamespace(attribute.LocalName, attribute.Value);
}
}
}
}
return manager;
}