public ImmutableOptions(DeclarationHandling declarationHandling, TextNodeHandling textNodeHandling, AttributeHandling attributeHandling, CommentHandling commentHandling, ProcessingInstructionHandling processingInstructionHandling)
 {
     DeclarationHandling           = declarationHandling;
     TextNodeHandling              = textNodeHandling;
     AttributeHandling             = attributeHandling;
     CommentHandling               = commentHandling;
     ProcessingInstructionHandling = processingInstructionHandling;
 }
 public Options()
 {
     DeclarationHandling           = DeclarationHandling.Compare;
     TextNodeHandling              = TextNodeHandling.Strict;
     AttributeHandling             = AttributeHandling.Strict;
     CommentHandling               = CommentHandling.Compare;
     ProcessingInstructionHandling = ProcessingInstructionHandling.Compare;
 }
        private static void CompareProcessingInstructions(XProcessingInstruction a, XProcessingInstruction b, ProcessingInstructionHandling processingInstructionHandling)
        {
            switch (processingInstructionHandling)
            {
            case ProcessingInstructionHandling.Compare:
                if (a.Data != b.Data)
                {
                    throw new UnequalityException(new UnequalityReason($"The data parts ({a.Data} and {b.Data}) of the processing instructions differs", a, b));
                }

                if (a.Target != b.Target)
                {
                    throw new UnequalityException(new UnequalityReason($"The target parts ({a.Target} and {b.Target}) of the processing instructions differs", a, b));
                }

                return;

            case ProcessingInstructionHandling.Ignore:
                return;

            default:
                throw new Exception("Reached unexpected point in code.");
            }
        }