@@ -60,6 +60,7 @@ public final class Xml {
6060 "((?:(?!\\ s|=).)*)\\ s*?=\\ s*?[\" ']?((?:(?<=\" )(?:(?<=\\ \\ )\" |[^\" ])*|(?<=')"
6161 + "(?:(?<=\\ \\ )'|[^'])*)|(?:(?!\" |')(?:(?!\\ />|>|\\ s).)+))" );
6262 private static final Map <String , String > XML_UNESCAPE = new HashMap <String , String >();
63+ private static final org .w3c .dom .Document DOCUMENT = createDocument ();
6364
6465 static {
6566 XML_UNESCAPE .put (QUOT , "\" " );
@@ -713,8 +714,15 @@ public static String escapeName(String name, Set<String> namespaces) {
713714 }
714715 final StringBuilder result = new StringBuilder ();
715716 char ch = name .charAt (0 );
716- if (com .sun .org .apache .xerces .internal .util .XMLChar .isNameStart (ch ) && ch != ':' || ch == '?' ) {
717- result .append (ch );
717+ if (ch != ':' ) {
718+ try {
719+ if (ch != '?' ) {
720+ DOCUMENT .createElement (String .valueOf (ch ));
721+ }
722+ result .append (ch );
723+ } catch (Exception ex ) {
724+ result .append ("__" ).append (Base32 .encode (Character .toString (ch ))).append ("__" );
725+ }
718726 } else {
719727 result .append ("__" ).append (Base32 .encode (Character .toString (ch ))).append ("__" );
720728 }
@@ -723,8 +731,13 @@ public static String escapeName(String name, Set<String> namespaces) {
723731 if (ch == ':' && ("xmlns" .equals (name .substring (0 , i ))
724732 || namespaces .contains (name .substring (0 , i )))) {
725733 result .append (ch );
726- } else if (com .sun .org .apache .xerces .internal .util .XMLChar .isName (ch ) && ch != ':' ) {
727- result .append (ch );
734+ } else if (ch != ':' ) {
735+ try {
736+ DOCUMENT .createElement ("a" + ch );
737+ result .append (ch );
738+ } catch (Exception ex ) {
739+ result .append ("__" ).append (Base32 .encode (Character .toString (ch ))).append ("__" );
740+ }
728741 } else {
729742 result .append ("__" ).append (Base32 .encode (Character .toString (ch ))).append ("__" );
730743 }
@@ -1348,6 +1361,18 @@ private static org.w3c.dom.Document createDocument(final String xml)
13481361 return builder .parse (new org .xml .sax .InputSource (new java .io .StringReader (xml )));
13491362 }
13501363
1364+ private static org .w3c .dom .Document createDocument () {
1365+ try {
1366+ final javax .xml .parsers .DocumentBuilderFactory factory =
1367+ javax .xml .parsers .DocumentBuilderFactory .newInstance ();
1368+ factory .setNamespaceAware (true );
1369+ final javax .xml .parsers .DocumentBuilder builder = factory .newDocumentBuilder ();
1370+ return builder .newDocument ();
1371+ } catch (javax .xml .parsers .ParserConfigurationException ex ) {
1372+ return null ;
1373+ }
1374+ }
1375+
13511376 public static Object fromXmlMakeArrays (final String xml ) {
13521377 try {
13531378 org .w3c .dom .Document document = createDocument (xml );
0 commit comments