Pregunta

Estoy usando Java back-end para crear una cadena XML que se pasa al navegador. Actualmente estoy usando una simple manipulación de cadenas para producir este XML. ¿Es esencial que use alguna biblioteca XML en Java para producir la cadena XML? Encuentro que las bibliotecas son muy difíciles de usar en comparación con lo que necesito.

¿Fue útil?

Solución

No es esencial, pero es aconsejable. Sin embargo, si la manipulación de cuerdas funciona para usted, ¡adelante! Hay muchos casos en los que el texto XML pequeño o simple se puede construir de forma segura a mano.

Solo ten en cuenta que crear texto XML es más difícil de lo que parece. Aquí hay algunos criterios que consideraría:

  • Primero: ¿cuánto control tiene sobre la información que se incluye en el xml?

Cuanto menos control tenga sobre los datos de origen, más probabilidades tendrá de problemas y más ventajosa será la biblioteca. Por ejemplo: (a) ¿Puede garantizar que los nombres de los elementos nunca tendrán un carácter que sea ilegal en un nombre? (b) ¿Qué hay de las citas en el contenido de un atributo? ¿Pueden pasar, y los estás manejando? (c) ¿Los datos contienen alguna vez algo que deba codificarse como una entidad (como el menos de lo que a menudo se debe generar como & amp; lt; ); ¿Lo estás haciendo correctamente?

  • Segundo, capacidad de mantenimiento: ¿el código que crea el XML es fácil de entender por otra persona ?

Probablemente no quieras quedarte con el código de por vida. He trabajado con código C ++ de segunda mano que construye a mano XML y puede ser sorprendentemente oscuro. Por supuesto, si este es un proyecto personal tuyo, entonces no debes preocuparte por " otros " ;: sustituto " en un año " para " otros " arriba.

No me preocuparía por el rendimiento. Si su XML es lo suficientemente simple como para escribirlo a mano, cualquier sobrecarga de la biblioteca probablemente no tenga sentido. Por supuesto, su caso puede ser diferente, pero debe medir para demostrarlo primero.

Finalmente, sí; puede crear texto XML a mano si es lo suficientemente simple; pero no saber las bibliotecas disponibles es probablemente no es la razón correcta.

Una biblioteca XML moderna es una herramienta bastante poderosa, pero también puede ser desalentadora. Sin embargo, aprender lo esencial de su biblioteca XML no es tan difícil, y puede ser muy útil; entre otras cosas, es casi un requisito en el mercado laboral de hoy. Simplemente no se atasque con espacios de nombres, esquemas y otras características más sofisticadas hasta que obtenga lo esencial.

Buena suerte.

Otros consejos

Xml es difícil. Analizarte a ti mismo es una mala idea, incluso es una idea peor generar contenido por ti mismo. Echa un vistazo a la especificación Xml 1.1.

Tiene que lidiar con cosas tales como la codificación adecuada, la codificación de atributos (por ejemplo, produce un xml no válido), el escape CDATA adecuado, la codificación UTF, las entidades DTD personalizadas, y eso es sin tener que agregar los espacios de nombres mix de xml con el espacio de nombres predeterminado / vacío , atributos de espacio de nombres, etc.

Aprende un kit de herramientas, hay mucho disponible.

Creo que la manipulación de cadenas personalizadas está bien, pero hay que tener en cuenta dos cosas:

  1. Tu código no es tan maduro como la biblioteca. Asigne tiempo en su plan para manejar los errores que aparecen.
  2. Su enfoque probablemente no se escalará tan bien como una biblioteca de terceros cuando el xml comience a crecer (tanto en términos de rendimiento como de facilidad de uso).

Conozco una base de código que utiliza la manipulación de cadenas personalizada para la salida xml (y una biblioteca de terceros para la entrada). Para empezar, estaba bien, pero se convirtió en una verdadera molestia después de un tiempo.

Sí, usa la biblioteca.

Alguien se tomó el tiempo y el esfuerzo para crear algo que generalmente es mejor de lo que podrías imaginar. La manipulación de la cadena es para devolver un solo nodo, pero una vez que comiences a necesitar manipular el DOM o usar una consulta XPath, la biblioteca te salvará.

Al no usar una biblioteca, se arriesga a generar o analizar datos que no están bien formados, lo que tarde o temprano sucederá . Por la misma razón que document.write no está permitido en XHTML, no debe escribir su marca XML como una cadena.

Sí.

No tiene sentido omitir la herramienta esencial: incluso escribir xml no es trivial con tener que escapar de esos símbolos y símbolos, sin mencionar los enlaces de espacios de nombres (si es necesario). Y al final, las bibliotecas generalmente pueden leer y escribir xml no solo de manera más confiable sino también más eficiente (especialmente para Java).

Pero es posible que haya estado buscando herramientas incorrectas, si parecen demasiado complicadas. El enlace de datos usando JAXB o XStream es simple; pero para una salida XML simple y directa, utilizo StaxMate . En realidad, puede simplificar la tarea de muchas maneras (cierra automáticamente las etiquetas de inicio, escribe declaraciones de espacio de nombres si es necesario, etc.).

No: si puede analizarlo usted mismo (como lo está haciendo) y se ajustará a sus necesidades, no necesita ninguna biblioteca.

Solo asegúrese de satisfacer sus necesidades futuras: la creación compleja de XML se realiza mejor utilizando bibliotecas, algunas de las cuales también vienen en versiones muy simples.

La única vez que hice algo como esto en el código de producción fue cuando un colega y yo construimos un preprocesador para poder incrustar fragmentos XML de otros archivos en un XML más grande. En la carga, primero analizaríamos estas incrustaciones (referencias de archivos en cadenas de comentarios XML) y las reemplazaríamos con el fragmento real al que hacían referencia. Luego pasaríamos el resultado combinado al analizador XML.

No tiene que usar la biblioteca para analizar XML, pero consulte esta pregunta
¿Qué consideraciones se deben hacer antes de reinventar la rueda?
antes de comenzar a escribir su propio código para analizar / generar xml.

No, especialmente para generar (el análisis me sentiría menos inclinado ya que el texto de entrada siempre puede sorprenderlo). Creo que está bien, pero prepárate para cambiar a una biblioteca si te pasas más de unos minutos manteniendo tu propio código.

No creo que usar la API DOM XML que viene con el JDK sea difícil, es fácil crear nodos, atributos, etc. de Element, y más tarde es fácil convertir cadenas en un documento DOM o documentos DOM en un Cadena

En la primera página que google encuentra desde España ( ejemplo XML español ):

public String DOM2String(Document doc)
{
    TransformerFactory transformerFactory =TransformerFactory.newInstance();
    Transformer transformer = null;
    try{
        transformer = transformerFactory.newTransformer();
    }catch (javax.xml.transform.TransformerConfigurationException error){
        coderror=123;
        msgerror=error.getMessage();
        return null;
    }

    Source source = new DOMSource(doc);

    StringWriter writer = new StringWriter();
    Result result = new StreamResult(writer);
    try{
        transformer.transform(source,result);
    }catch (javax.xml.transform.TransformerException error){
        coderror=123;
        msgerror=error.getMessage();
        return null;
    }

    String s = writer.toString();
    return s;
}

public Document string2DOM(String s)
{
    Document tmpX=null;
    DocumentBuilder builder = null;
    try{
        builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    }catch(javax.xml.parsers.ParserConfigurationException error){
        coderror=10;
        msgerror="Error crando factory String2DOM "+error.getMessage();
        return null;
    }
    try{
        tmpX=builder.parse(new ByteArrayInputStream(s.getBytes()));
    }catch(org.xml.sax.SAXException error){
        coderror=10;
        msgerror="Error parseo SAX String2DOM "+error.getMessage();
        return null;
    }catch(IOException error){
        coderror=10;
        msgerror="Error generando Bytes String2DOM "+error.getMessage();
        return null;
    }
    return tmpX;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top