Added function xml.sax.saxutils.quoteattr().

This closes SF bug #440351.  It should not be moved to Python 2.1.1.
diff --git a/Lib/test/output/test_sax b/Lib/test/output/test_sax
index de49c80..b14cf94 100644
--- a/Lib/test/output/test_sax
+++ b/Lib/test/output/test_sax
@@ -1,6 +1,7 @@
 test_sax
 Passed test_attrs_empty
 Passed test_attrs_wattr
+Passed test_double_quoteattr
 Passed test_escape_all
 Passed test_escape_basic
 Passed test_escape_extra
@@ -25,10 +26,13 @@
 Passed test_make_parser2
 Passed test_nsattrs_empty
 Passed test_nsattrs_wattr
+Passed test_quoteattr_basic
+Passed test_single_double_quoteattr
+Passed test_single_quoteattr
 Passed test_xmlgen_basic
 Passed test_xmlgen_content
 Passed test_xmlgen_content_escape
 Passed test_xmlgen_ignorable
 Passed test_xmlgen_ns
 Passed test_xmlgen_pi
-32 tests, 0 failures
+36 tests, 0 failures
diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index f4b43fe..62705c9 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -8,7 +8,7 @@
 except SAXReaderNotAvailable:
     # don't try to test this module if we cannot create a parser
     raise ImportError("no XML parsers available")
-from xml.sax.saxutils import XMLGenerator, escape, XMLFilterBase
+from xml.sax.saxutils import XMLGenerator, escape, quoteattr, XMLFilterBase
 from xml.sax.expatreader import create_parser
 from xml.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl
 from cStringIO import StringIO
@@ -69,6 +69,25 @@
 def test_escape_extra():
     return escape("Hei på deg", {"å" : "å"}) == "Hei på deg"
 
+# ===== quoteattr
+
+def test_quoteattr_basic():
+    return quoteattr("Donald Duck & Co") == '"Donald Duck & Co"'
+
+def test_single_quoteattr():
+    return (quoteattr('Includes "double" quotes')
+            == '\'Includes "double" quotes\'')
+
+def test_double_quoteattr():
+    return (quoteattr("Includes 'single' quotes")
+            == "\"Includes 'single' quotes\"")
+
+def test_single_double_quoteattr():
+    return (quoteattr("Includes 'single' and \"double\" quotes")
+            == "\"Includes 'single' and "double" quotes\"")
+
+# ===== make_parser
+
 def test_make_parser():
     try:
         # Creating a parser should succeed - it should fall back