outer.attribute(new QName(null, "firstAttr")) = Hello
outer.attribute("firstAttr") = Hello
outer.attribute(customKey) = Hello
outer.attribute("sharedAttr") = Outer level
outer.attribute("missingAttr") = 
Types: XMLList XMLList XMLList
outer.attributes() = HelloOuter level
outer.attributes().length() = 2
outer.child.attributes() = Second childSecond child attrThird childThird child attr
outer.child.attributes().length() = 4
new XMLList().attributes().length() = 0
outer.child.attribute(otherCustomKey) = Second childThird child
outer.child.attribute(new QName(null, "sharedAttr")) = Second childThird child
outer.child.attribute("sharedAttr") = Second childThird child
outer.child.attribute("sharedAttr").length() = 2
outer.child.attribute("missingAttr").length() = 0
outer.@newAttr = Some value
outer.attribute('newAttr') = Some value
outer.@secondNewAttr = 5
outer.attribute('secondNewAttr') = 5
outer.@thirdNewAttr = sharedAttr
outer.attribute('thirdNewAttr') = sharedAttr
outer.@name = Custom attr value
outer.@name.parent().name() = outer
outer.attribute('name') = Custom attr value
outer.name() = outer
Attr: firstAttr = Hello
Attr: sharedAttr = Outer level
Attr: newAttr = Some value
Attr: secondNewAttr = 5
Attr: thirdNewAttr = sharedAttr
Attr: name = Custom attr value
After delete: outer.@name =  outerName.parent() = undefined
After replace: outer.@myAttr = Second val
After delete: outer.@myAttr = 
