diff --git a/src/xercesc/internal/IGXMLScanner2.cpp b/src/xercesc/internal/IGXMLScanner2.cpp
index e3a1fb477d48d31950431da1033361607498e6a8..694c482ae066152bd791be5f3fcc2984e2089b24 100644
--- a/src/xercesc/internal/IGXMLScanner2.cpp
+++ b/src/xercesc/internal/IGXMLScanner2.cpp
@@ -224,7 +224,7 @@ IGXMLScanner::buildAttList(const  RefVectorOf<KVStringPair>&  providedAttrs
 
                         ValueValidate = true;
                     }
-                    else if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_SCHEMALOCACTION))
+                    else if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_SCHEMALOCATION))
                     {
                         // use anyURI as the validator
                         // tokenize the data and use the anyURI data for each piece
@@ -239,7 +239,7 @@ IGXMLScanner::buildAttList(const  RefVectorOf<KVStringPair>&  providedAttrs
                         ValueValidate = false;
                         tokenizeBuffer = true;
                     }
-                    else if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_NONAMESPACESCHEMALOCACTION))
+                    else if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_NONAMESPACESCHEMALOCATION))
                     {
                         attrValidator = DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_ANYURI);
                         //We should validate this value however
@@ -1711,9 +1711,9 @@ void IGXMLScanner::scanRawAttrListforNameSpaces(XMLSize_t attCount)
                 const XMLCh* valuePtr = curPair->getValue();
                 const XMLCh* suffPtr = &rawPtr[colonInd + 1];
 
-                if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_SCHEMALOCACTION))
+                if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_SCHEMALOCATION))
                     parseSchemaLocation(valuePtr);
-                else if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_NONAMESPACESCHEMALOCACTION))
+                else if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_NONAMESPACESCHEMALOCATION))
                     resolveSchemaGrammar(valuePtr, XMLUni::fgZeroLenString);
 
                 if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_TYPE)) {
@@ -1753,8 +1753,11 @@ void IGXMLScanner::parseSchemaLocation(const XMLCh* const schemaLocationStr)
     if (size % 2 != 0 ) {
         emitError(XMLErrs::BadSchemaLocation);
     } else {
+        // We need a buffer to normalize the attribute value into
+        XMLBuffer normalBuf(1023, fMemoryManager);
         for(XMLSize_t i=0; i<size; i=i+2) {
-            resolveSchemaGrammar(fLocationPairs->elementAt(i+1), fLocationPairs->elementAt(i));
+            normalizeAttRawValue(SchemaSymbols::fgXSI_SCHEMALOCATION, fLocationPairs->elementAt(i), normalBuf);
+            resolveSchemaGrammar(fLocationPairs->elementAt(i+1), normalBuf.getRawBuffer());
         }
     }
 }
diff --git a/src/xercesc/internal/SGXMLScanner.cpp b/src/xercesc/internal/SGXMLScanner.cpp
index 95ab0f4f7f821ca5c3efc7bc81df0305bfb81f2e..f5a4fbf1951c815b1e17405f661c7fcf33fb7fc0 100644
--- a/src/xercesc/internal/SGXMLScanner.cpp
+++ b/src/xercesc/internal/SGXMLScanner.cpp
@@ -2258,7 +2258,7 @@ SGXMLScanner::buildAttList(const  RefVectorOf<KVStringPair>&  providedAttrs
 
                         ValueValidate = true;
                     }
-                    else if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_SCHEMALOCACTION))
+                    else if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_SCHEMALOCATION))
                     {
                         // use anyURI as the validator
                         // tokenize the data and use the anyURI data for each piece
@@ -2273,7 +2273,7 @@ SGXMLScanner::buildAttList(const  RefVectorOf<KVStringPair>&  providedAttrs
                         ValueValidate = false;
                         tokenizeBuffer = true;
                     }
-                    else if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_NONAMESPACESCHEMALOCACTION))
+                    else if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_NONAMESPACESCHEMALOCATION))
                     {
                         attrValidator = DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_ANYURI);
                         //We should validate this value however
@@ -3594,9 +3594,9 @@ void SGXMLScanner::scanRawAttrListforNameSpaces(XMLSize_t attCount)
                 const XMLCh* valuePtr = curPair->getValue();
                 const XMLCh*  suffPtr = &rawPtr[colonInd + 1];
 
-                if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_SCHEMALOCACTION))
+                if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_SCHEMALOCATION))
                     parseSchemaLocation(valuePtr);
-                else if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_NONAMESPACESCHEMALOCACTION))
+                else if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_NONAMESPACESCHEMALOCATION))
                     resolveSchemaGrammar(valuePtr, XMLUni::fgZeroLenString);
 
                 if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_TYPE)) {
@@ -3634,8 +3634,11 @@ void SGXMLScanner::parseSchemaLocation(const XMLCh* const schemaLocationStr)
     if (size % 2 != 0 ) {
         emitError(XMLErrs::BadSchemaLocation);
     } else {
+        // We need a buffer to normalize the attribute value into
+        XMLBuffer normalBuf(1023, fMemoryManager);
         for(XMLSize_t i=0; i<size; i=i+2) {
-            resolveSchemaGrammar(schemaLocation->elementAt(i+1), schemaLocation->elementAt(i));
+            normalizeAttRawValue(SchemaSymbols::fgXSI_SCHEMALOCATION, schemaLocation->elementAt(i), normalBuf);
+            resolveSchemaGrammar(schemaLocation->elementAt(i+1), normalBuf.getRawBuffer());
         }
     }
 }
diff --git a/tests/src/XSTSHarness/regression/XERCESC-1831/ack.xml b/tests/src/XSTSHarness/regression/XERCESC-1831/ack.xml
new file mode 100644
index 0000000000000000000000000000000000000000..00316fc34db466a70a97bed8e25606144acf30b7
--- /dev/null
+++ b/tests/src/XSTSHarness/regression/XERCESC-1831/ack.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ack xmlns="http://www.theriak.is/namespace/\:*?&quot;&lt;&gt;|"
+     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.theriak.is/namespace/\:*?&quot;&lt;&gt;| ack.xsd" message_id="test_msg_id"/>
+    
\ No newline at end of file
diff --git a/tests/src/XSTSHarness/regression/XERCESC-1831/ack.xsd b/tests/src/XSTSHarness/regression/XERCESC-1831/ack.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..a16c2fd573facc98d2910384edd95591b11cd524
--- /dev/null
+++ b/tests/src/XSTSHarness/regression/XERCESC-1831/ack.xsd
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema targetNamespace="http://www.theriak.is/namespace/\:*?&quot;&lt;&gt;|" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.theriak.is/namespace/\:*?&quot;&lt;&gt;|" elementFormDefault="qualified" attributeFormDefault="unqualified">
+	<xs:element name="ack">
+		<xs:complexType>
+			<xs:attribute name="message_id" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+</xs:schema>
diff --git a/tests/src/XSTSHarness/regression/Xerces.testSet b/tests/src/XSTSHarness/regression/Xerces.testSet
index 7aec97406f9b34cb1aa000d3a42a2b4612eaa498..cdf11e44e10f96a1d2f09bde2a661b107be3c69c 100644
--- a/tests/src/XSTSHarness/regression/Xerces.testSet
+++ b/tests/src/XSTSHarness/regression/Xerces.testSet
@@ -611,6 +611,22 @@
       <current status="accepted" date="2008-12-29"/>
     </schemaTest>
   </testGroup>
+  <testGroup name="XERCESC-1831">
+    <annotation>
+      <documentation>Xerces-c can not parse instance with special chars (", &lt; and &gt;) in target namespace</documentation>
+    </annotation>
+    <documentationReference xlink:href="https://issues.apache.org/jira/browse/XERCESC-1831"/>
+    <schemaTest name="XERCESC-1831">
+      <schemaDocument xlink:href="./XERCESC-1831/ack.xsd"/>
+      <expected validity="valid"/>
+      <current status="accepted" date="2009-08-10"/>
+    </schemaTest>
+    <instanceTest name="XERCESC-1831-1">
+      <instanceDocument xlink:href="./XERCESC-1831/ack.xml"/>
+      <expected validity="valid"/>
+      <current status="accepted" date="2009-08-10"/>
+    </instanceTest>
+  </testGroup>
   <testGroup name="XERCESC-1832">
     <annotation>
       <documentation>Namespace definitions attached to xs:extension/xs:restriction are not processed</documentation>