Escape de caracteres especiales XML en Java String

Cuando leemos un archivo XML e intentamos escribir en otro archivo XML, es importante que cuidemos los caracteres especiales en el XML. Hay algunos caracteres reservados en Java que deben transformarse o escaparse para que se consideren una string literal. Si no evitamos estos caracteres especiales, los analizadores como los analizadores DOM o SAX en Java los considerarían como etiquetas XML específicamente en el caso de < y >. Incluso si usamos la transformación XSLT, estos analizadores fallarían. Por lo tanto, necesitamos escapar o transformar estos caracteres especiales antes de leerlos como un literal de string en Java.

Caracteres especiales en XML

Hay 5 caracteres especiales que se usan principalmente en XML que deben escaparse cuando se usan como una string Java

  • & – &erio;
  • <-<
  • > — >
  • ” — «
  • ‘ – ‘

Estos caracteres especiales también se conocen como metacaracteres XML. Mediante el proceso de escape, estaríamos reemplazando estos caracteres con strings alternativas para dar el resultado literal de caracteres especiales.

Ejemplo:

<GeeksForGeeks> Data Structures & Java </GeeksForGeeks>

// is an invalid string in java because '&' is a reserved literal 
// in XML that is used to import other XML entity. For converting this 
// to a valid String literal we need to &amp; instead of & here.

<GeeksForGeeks> Data Structure &amp; Java </GeeksForGeeks>

// now becomes a valid String.

En Java, siempre podemos escribir nuestras propias funciones para escapar de los caracteres especiales XML con sus literales de string equivalentes, pero también podemos usar la biblioteca de Java «StringEscapeUtils» proporcionada por Apache Commons. Esta biblioteca nos proporciona una API común que hace que el XML se escape por nosotros.

Código:

Java

// Java program to escape all the five characters
// mentioned above using the StringEscapeUtils class
  
import java.io.*;
import org.apache.commons.lang.StringEscapeUtils;
  
class GeeksForGeeks {
    public static void main (String[] args) {
        
      System.out.println("Program to escape XML Special Characters !!");
          
      // Escape & character in XML String 
      String unescapedXMLString = "DataStructures & Java";
        
      System.out.println("Unescaped String: " + unescapedXMLString);
        
      // using StringEscapeUtils
      System.out.println("Escaped String: " 
                         + StringEscapeUtils.escapeXml(unescapedXMLString));
        
      // Escape > character in XML String 
      unescapedXMLString = "DataStructures > Java";
        
      System.out.println("Unescaped String: " + unescapedXMLString);
        
      // using StringEscapeUtils
      System.out.println("Escaped String: " 
                         + StringEscapeUtils.escapeXml(unescapedXMLString));
        
      // Escape < character in XML String 
      unescapedXMLString = "DataStructures < Java";
        
      System.out.println("Unescaped String: " + unescapedXMLString);
        
      // using StringEscapeUtils
      System.out.println("Escaped String: " 
                         + StringEscapeUtils.escapeXml(unescapedXMLString));
        
      // Escape " character in XML String 
      unescapedXMLString = "DataStructures \" Java";
        
      System.out.println("Unescaped String: " + unescapedXMLString);
        
      // using StringEscapeUtils
      System.out.println("Escaped String: " 
                         + StringEscapeUtils.escapeXml(unescapedXMLString));
        
      // Escape ' character in XML String 
      unescapedXMLString = "DataStructures ' Java";
        
      System.out.println("Unescaped String: " + unescapedXMLString);
        
      // using StringEscapeUtils
      System.out.println("Escaped String: " 
                         + StringEscapeUtils.escapeXml(unescapedXMLString));
             
    }
}

Producción:

Program to escape XML Special Characters !!
Unescaped String: DataStructures & Java
Escaped String: DataStructures &amp; Java
Unescaped String: DataStructures > Java
Escaped String: DataStructures &gt; Java
Unescaped String: DataStructures < Java
Escaped String: DataStructures &lt; Java
Unescaped String: DataStructures " Java
Escaped String: DataStructures &quot; Java
Unescaped String: DataStructures ' Java
Escaped String: DataStructures &apos; Java

Publicación traducida automáticamente

Artículo escrito por vijayalakshmivenkataraman y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *