Here's the complete HTML translated to Spanish, with `lang="es"`, the ES link marked as active, and the title updated with `[ES]`. ```html #755: XmlHelper [ES]
EN · DE · RU · FR · ES

#755: XmlHelper.java

projectforge-business/src/main/java/org/projectforge/framework/xmlstream/XmlHelper.java Clase de utilidad Java — Puente de análisis y formateo XML. 135 líneas. Usa dom4j. Fuente: projectforge-business/src/main/java/org/projectforge/framework/xmlstream/XmlHelper.java 135 líneas · 97 código · 28 comentarios · 10 en blanco
Propósito: Una clase de utilidad para operaciones XML: convertir cadenas a elementos dom4j, elementos de vuelta a cadenas y formateo. 135 líneas. Usa dom4j para análisis/serialización de XML regular (no XStream, no W3C DOM). Esta es la tercera biblioteca XML en el proyecto junto con XStream (preferencias de usuario) y la API W3C DOM (SVG mediante Batik). La constante XML_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" — el encabezado XML estándar utilizado al generar archivos de exportación XML. La codificación está fijada como UTF-8 — una decisión a nivel de código, no de configuración.

Métodos

replaceQuotes(String xml) — normalización de comillas

Reemplaza comillas simples (') con comillas dobles (") en cadenas XML. Javadoc: "Esto es útil para escribir constantes de cadena XML, por ejemplo, en casos de prueba." En literales de cadena Java, las comillas simples para atributos evitan el escape, pero el XML válido requiere comillas dobles. Este método permite código de prueba como: XmlHelper.replaceQuotes("<node name='test'/>")"<node name=\"test\"/>".

fromString(String str) — cadena → Elemento dom4j

Analiza una cadena XML en un Element de dom4j. Usa DocumentHelper.parseText(). Devuelve el elemento raíz (document.getRootElement()). En caso de error de análisis, registra y devuelve null (no lanza excepción — el llamante debe verificar nulo). Para cadenas vacías/en blanco, devuelve null.

toString(Element el, boolean prettyFormat) — Elemento dom4j → cadena XML formateada

Serializa un Element de dom4j de vuelta a una cadena. Usa XMLWriter de dom4j con OutputFormat. Cuando prettyFormat=true: habilita saltos de línea y sangría de 2 espacios. Importante: se llama a writer.close() para vaciar el búfer.

toString(org.w3c.dom.Document, boolean prettyFormat) — Documento W3C DOM → cadena

Trabaja con un tipo XML diferenteorg.w3c.dom.Document (usado por SVG/Batik). Usa javax.xml.transform.Transformer (procesador XSLT). Con prettyFormat=true: añade INDENT=yes y indent-amount=2 específico de Xalan. Todos los errores se envuelven en InternalErrorException (a diferencia del método dom4j que registra y devuelve null) — porque los errores de transformación W3C DOM se consideran errores internos críticos.

Dos Bibliotecas XML en una Clase — Deuda Arquitectónica

Tener métodos para dos representaciones XML diferentes (dom4j y W3C DOM) en una clase es un artefacto histórico. dom4j se usa para XmlStream (serialización de datos), W3C DOM para renderizado SVG (Batik). Terminaron en la misma clase de utilidad porque "trabajo XML" se percibía como una responsabilidad, aunque sirven a subsistemas diferentes. Una refactorización adecuada extraería el método W3C a un SvgXmlHelper o lo integraría en BatikImageRenderer.

Historial Git

868d6abb7 2025 → 2026 (actualización de año de copyright)
63081666f Encabezados de archivos fuente: 2024→2025
b6092df09 Copyright 2023 → 2024
ab45d51fa Copyright 2001-2022 → 2001-2023
5f7ef41b8 Copyright 2021 → 2022
cd27dd997 paquete xstream → xmlstream
ceb63e8a1 Encabezado de código fuente: (C) 2001-2021
7c79f1922 Copyright del encabezado fuente → 2020
32f634b88 Optimizar importaciones
000ca723d Eliminar expresiones booleanas sin sentido (negocio)
dd5ca38ac Copyright de todos los encabezados de archivos Java actualizado o creado
a5bbdca6a Cambiar logger a slf4j
f979e8a42 MGC-UPDATE: Actualización a versión 3.0.0-SNAPSHOT
9ebb88522 Commit inicial
Cambio notable: a5bbdca6a cambió el logger de una implementación propietaria a SLF4J — parte de una estandarización de registro a nivel de proyecto. 000ca723d eliminó expresiones booleanas sin sentido (por ejemplo, == true o comprobaciones nulas redundantes) durante una pasada de limpieza de código. f979e8a42 fue un aumento de versión importante de 2.x a 3.0.0-SNAPSHOT.