trying to fix #56948, this led to an XPath fix, improvements of SAX

* SAX.c parser.c testXPath.c xpath.c: trying to fix #56948, this
  led to an XPath fix, improvements of SAX initialization, and
  an added option --nocdata to testXPath
Daniel
diff --git a/SAX.c b/SAX.c
index 5b41072..87b25b1 100644
--- a/SAX.c
+++ b/SAX.c
@@ -1593,6 +1593,10 @@
 void
 xmlDefaultSAXHandlerInit(void)
 {
+    static int xmlSAXInitialized = 0;
+    if (xmlSAXInitialized)
+	return;
+
     xmlDefaultSAXHandler.internalSubset = internalSubset;
     xmlDefaultSAXHandler.externalSubset = externalSubset;
     xmlDefaultSAXHandler.isStandalone = isStandalone;
@@ -1623,6 +1627,8 @@
 	xmlDefaultSAXHandler.warning = xmlParserWarning;
     xmlDefaultSAXHandler.error = xmlParserError;
     xmlDefaultSAXHandler.fatalError = xmlParserError;
+
+    xmlSAXInitialized = 1;
 }
 
 #ifdef LIBXML_HTML_ENABLED
@@ -1667,6 +1673,10 @@
 void
 htmlDefaultSAXHandlerInit(void)
 {
+    static int htmlSAXInitialized = 0;
+    if (htmlSAXInitialized)
+	return;
+
     htmlDefaultSAXHandler.internalSubset = internalSubset;
     htmlDefaultSAXHandler.externalSubset = NULL;
     htmlDefaultSAXHandler.isStandalone = NULL;
@@ -1694,6 +1704,8 @@
     htmlDefaultSAXHandler.warning = xmlParserWarning;
     htmlDefaultSAXHandler.error = xmlParserError;
     htmlDefaultSAXHandler.fatalError = xmlParserError;
+
+    htmlSAXInitialized = 1;
 }
 #endif /* LIBXML_HTML_ENABLED */
 
@@ -1739,6 +1751,10 @@
 void
 docbDefaultSAXHandlerInit(void)
 {
+    static int docbSAXInitialized = 0;
+    if (docbSAXInitialized)
+	return;
+
     docbDefaultSAXHandler.internalSubset = internalSubset;
     docbDefaultSAXHandler.externalSubset = NULL;
     docbDefaultSAXHandler.isStandalone = isStandalone;
@@ -1766,6 +1782,8 @@
     docbDefaultSAXHandler.warning = xmlParserWarning;
     docbDefaultSAXHandler.error = xmlParserError;
     docbDefaultSAXHandler.fatalError = xmlParserError;
+
+    docbSAXInitialized = 1;
 }
 
 #endif /* LIBXML_DOCB_ENABLED */