private static void ForEachConstraintEntry <TConstraint, TConstraintData, TConstraintPartData>( XmlNamespaceManager nsMan, MyXmlElement scope, TConstraint schemaConstraint, Func <MyXmlElement, TConstraint, TConstraintData> constraintInitAction, Func <XmlSchemaXPath, int, TConstraintData, TConstraintPartData> constraintPartInitAction, Action <MyXmlAttribute, TConstraintPartData> constraintPartAction ) where TConstraint : XmlSchemaIdentityConstraint { using (NsScope(nsMan, schemaConstraint)) { List <MyXmlElement> elements; var constraintData = constraintInitAction(scope, schemaConstraint); using (NsScope(nsMan, schemaConstraint.Selector)) { elements = scope.SelectNodes(schemaConstraint.Selector.XPath, nsMan).OfType <MyXmlElement>().ToList(); } int n = 0; foreach (var schemaConstraintKeyField in schemaConstraint.Fields.OfType <XmlSchemaXPath>()) { var constraintPartData = constraintPartInitAction(schemaConstraintKeyField, n, constraintData); using (NsScope(nsMan, schemaConstraintKeyField)) { foreach (var element in elements) { var attribute = element.SelectSingleNode(schemaConstraintKeyField.XPath, nsMan) as MyXmlAttribute; if (attribute != null) { constraintPartAction(attribute, constraintPartData); } } } n++; } } }
public XmlScopeData(MyXmlElement scopeElement) { this.ScopeElement = scopeElement; }