public static void EnumAttributes(XmlReader xr, EnumAttributeHandler callback) { if (xr.NodeType == XmlNodeType.Element) { string elName = xr.Name.ToLower(); for (int i = 0; i < xr.AttributeCount; i++) { xr.MoveToAttribute(i); callback(xr.Name, xr.Value, elName); } xr.MoveToElement(); if (!xr.IsEmptyElement) { xr.MoveToContent(); callback("$", xr.Value, elName); } } }