es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eres un traductor de español que traduce documentos de TI. Traduce lo siguiente al español. Mostrar el texto en HTML real en rojo en lugar de mostrar el texto con el código de color como {color:#de350b}duchesse{color}.

Estoy usando el siguiente código y estoy intentando imprimir el siguiente código en HTML:

import com.atlassian.jira.component.ComponentAccessor
import java.text.SimpleDateFormat
import com.opensymphony.util.TextUtils
import com.atlassian.jira.issue.comments.*
import org.w3c.dom.*;
import javax.xml.parsers.*;
import groovy.xml.*
import grrovy.util.*; 
import org.xml.sax.InputSource; 
import java.io.*; 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.Document;
import org.w3c.dom.DOMException;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList; 
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
def commentManager = ComponentAccessor.getCommentManager()

Comment comment = commentManager.getLastComment(issue)

if(comment != null) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MMM/yy HH:mm", Locale.ENGLISH)

    def writer = new StringWriter()
    def xml = new MarkupBuilder(writer)
    // la línea de abajo recupera {color:#de350b}duchesse{color}
    def body = comment.body




    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();




        String html = "

"+body+"

"; System.out.println(html); // original Document doc2 = Jsoup.parse(html); // pretty print HTML System.out.println(doc2.toString()); return doc2 }

Mi salida tiene esta forma: {color:#de350b}duchesse{color}, pero me gustaría que la salida esté en HTML real que, en este caso, significa que solo “duchesse” se debe mostrar en rojo en lugar de {color:#de350b}duchesse{color}.

¿Cómo puedo solucionarlo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para solucionar esto, puedes usar Jsoup, una biblioteca Java para analizar HTML, para analizar la cadena de HTML y convertir la palabra {color:#de350b}duchesse{color} en un elemento HTML con un atributo de estilo que establezca el color en rojo.

    Reemplaza el siguiente código:

    String html = "<html><body><h1></h1><h1>"+body+"</h1></body></html>";
    System.out.println(html);           // original
    
    Document doc2 = Jsoup.parse(html);   // pretty print HTML
    System.out.println(doc2.toString());
    return doc2
    

    Con el siguiente código:

    String formattedBody = body.replaceAll("\\{color:(.*?)\\}(.*?)\\{color\\}", "<span style="\"color:" $1\"="">$2</span>");
    String html = "<html><body><h1></h1><h1>" + formattedBody + "</h1></body></html>";
    System.out.println(html);           // original
    
    Document doc2 = Jsoup.parse(html);   // pretty print HTML
    System.out.println(doc2.toString());
    return doc2;
    

    Explicación:

    • El método replaceAll reemplaza todas las apariciones de {color: códigoDeColor}contenido{color} en la cadena de body con un elemento span que tiene un atributo de estilo color establecido en el código de color especificado y el contenido dentro.
    • La cadena resultante formattedBody se concatena con la plantilla de HTML para crear una cadena de documento HTML válida.
    • Finalmente, la biblioteca Jsoup se utiliza para analizar la cadena de HTML en un objeto Document, que puede ser devuelto por el método.

    Con este código actualizado, la salida se mostrará como HTML real con el contenido “duchesse” en color rojo.

Comments are closed.