diff --git a/src/AngleSharp.Xml.Tests/Parser/XmlParsing.cs b/src/AngleSharp.Xml.Tests/Parser/XmlParsing.cs
index e8d2949..818f901 100644
--- a/src/AngleSharp.Xml.Tests/Parser/XmlParsing.cs
+++ b/src/AngleSharp.Xml.Tests/Parser/XmlParsing.cs
@@ -1,3 +1,7 @@
+using System.Linq;
+using System.Threading.Tasks;
+using AngleSharp.Dom;
+
namespace AngleSharp.Xml.Tests.Parser
{
using AngleSharp.Dom;
@@ -149,7 +153,16 @@ public void ParseInvalidXmlShouldNotThrowWhenSuppressingErrors_Issue14()
}
[Test]
- public void XmlPrefixedAttributesShouldLocateXmlNamespaceWithoutDeclaration()
+ public async Task NamespaceDeclarationsInAttributesShouldNotCareAboutOrdering()
+ {
+ var document = @"1"
+ .ToXmlDocument();
+ var root = document.DocumentElement;
+ Assert.AreEqual("http://www.idpf.org/2007/ops",
+ root.Attributes.First(att => att.LocalName == "type").NamespaceUri);
+
+ [Test]
+ public async Task XmlPrefixedAttributesShouldLocateXmlNamespaceWithoutDeclaration()
{
var document = @"".ToXmlDocument();
var root = document.DocumentElement;
diff --git a/src/AngleSharp.Xml/Parser/XmlDomBuilder.cs b/src/AngleSharp.Xml/Parser/XmlDomBuilder.cs
index da87479..3f19f88 100644
--- a/src/AngleSharp.Xml/Parser/XmlDomBuilder.cs
+++ b/src/AngleSharp.Xml/Parser/XmlDomBuilder.cs
@@ -1,3 +1,5 @@
+using System.Linq;
+
namespace AngleSharp.Xml.Parser
{
using AngleSharp.Dom;
@@ -274,9 +276,23 @@ private void InBody(XmlToken token)
var element = CreateElement(tagToken.Name, tagToken.IsSelfClosing);
CurrentNode.AppendChild(element);
- for (var i = 0; i < tagToken.Attributes.Count; i++)
+ var namespaceDeclarations = tagToken.Attributes
+ .Where(attr => attr.Key.StartsWith("xmlns"))
+ .ToList();
+ var otherAttributes = tagToken.Attributes
+ .Where(attr => !attr.Key.StartsWith("xmlns"))
+ .ToList();
+
+ for (var i = 0; i < namespaceDeclarations.Count; i++)
+ {
+ var attr = namespaceDeclarations[i];
+ var item = CreateAttribute(attr.Key, attr.Value.Trim());
+ element.AddAttribute(item);
+ }
+
+ for (var i = 0; i < otherAttributes.Count; i++)
{
- var attr = tagToken.Attributes[i];
+ var attr = otherAttributes[i];
var item = CreateAttribute(attr.Key, attr.Value.Trim());
element.AddAttribute(item);
}