java - objetos - manual de programacion android pdf
¿Es esencial que use bibliotecas para manipular XML? (11)
Estoy usando Java back end para crear una cadena XML que se pasa al navegador. Actualmente estoy usando la manipulación simple 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.
Creo que la manipulación de cadenas personalizadas está bien, pero debes tener en cuenta dos cosas:
- Tu código no es tan maduro como la biblioteca. Asigne tiempo en su plan para manejar los errores emergentes.
- 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 personalizadas para la salida xml (y una biblioteca de terceros para la entrada). Estaba bien para empezar, pero se convirtió en una verdadera molestia después de un tiempo.
No creo que el uso de la API DOM XML que viene con el JDK sea difícil, es fácil crear nodos Element, atributos, etc. ... y más tarde es fácil convertir cadenas a un documento DOM documentos sor DOM en un String
En la primera página, google encuentra de España ( ejemplo de XML en 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;
}
No es esencial, pero aconsejable. Sin embargo, si la manipulación de cadenas funciona para ti, ¡adelante! Hay muchos casos en que el texto XML pequeño o simple se puede construir de forma segura a mano.
Solo tenga 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 entra en el xml?
Cuanto menos control tengas sobre los datos de origen, es más probable que tengas problemas y cuanto más ventajosa sea la biblioteca. Por ejemplo: (a) ¿Puedes 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 suceder, y los estás manejando? (c) ¿Alguna vez los datos contienen algo que podría necesitar ser codificado como una entidad (como el menos de lo que a menudo debe salir como & lt; ); ¿Lo estás haciendo correctamente?
- En segundo lugar, facilidad de mantenimiento: ¿el código que crea el XML es fácil de entender para otra persona ?
Probablemente no quieras quedarte atrapado con el código de por vida. He trabajado con código C ++ de segunda mano que crea XML a mano y puede ser sorprendentemente oscuro. Por supuesto, si este es un proyecto personal suyo, entonces no necesita preocuparse por "otros": sustituya "en un año" por "otros" arriba.
No me preocuparía el rendimiento. Si su XML es lo suficientemente simple como para poder escribirlo a mano, cualquier sobrecarga de la biblioteca probablemente no tenga sentido. Por supuesto, su caso puede ser diferente, pero debe medir para probarlo primero.
Finalmente, sí; puedes crear manualmente texto XML a mano si es lo suficientemente simple; pero no saber las bibliotecas disponibles probablemente no sea la razón correcta.
Una biblioteca XML moderna es una herramienta bastante poderosa, pero también puede ser desalentadora. Sin embargo, aprender los elementos esenciales de su biblioteca XML no es tan difícil, y puede ser bastante útil; entre otras cosas, es casi un requisito en el mercado de trabajo de hoy. Simplemente no te empantanes con espacios de nombres, esquemas y otras características más elegantes hasta que obtengas los elementos esenciales.
Buena suerte.
No, especialmente para generar (el análisis me gustaría menos como texto de entrada siempre puede sorprenderte). Creo que está bien, pero prepárate para cambiar a una biblioteca en caso de que pases más de unos minutos manteniendo tu propio código.
No, si puede analizarlo usted mismo (como lo hace), y se escalará según sus necesidades, no necesita ninguna biblioteca.
Solo asegúrese de que sus necesidades futuras se cumplan; la creación de XML complejo se realiza mejor utilizando bibliotecas, algunas de las cuales también vienen en sabores muy simples.
Sí, usa la biblioteca.
Alguien se tomó el tiempo y el esfuerzo para crear algo que usualmente es mejor de lo que se te ocurre. La manipulación de cadenas es para enviar de vuelta un solo nodo, pero una vez que comienza a necesitar manipular el DOM, o utiliza una consulta XPath, la biblioteca lo guardará.
Xml es difícil. Parsearse es una mala idea, incluso es una idea peor generar contenido usted mismo. Eche un vistazo a la especificación Xml 1.1.
Tienes que lidiar con cosas tales como la codificación adecuada, codificación de atributos (por ejemplo, produce xml no válido), escapado de CDATA adecuado, codificación UTF, entidades DTD personalizadas, y eso sin tirar en la mezcla espacios de nombres xml con el espacio de nombres predeterminado / vacío, atributos de espacio de nombres , etc.
Aprenda un juego de herramientas, hay muchas disponibles.
Al no usar una biblioteca, corre el riesgo de 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 marcado XML como una cadena.
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 insertar 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, transmitiríamos el resultado combinado al Analizador XML.
Sí.
No tiene sentido omitir la herramienta esencial: incluso escribir xml no es trivial al tener que escapar esos símbolos y símbolos, por no mencionar los enlaces de espacios de nombres (si es necesario). Y, al final, libs generalmente puede leer y escribir XML no solo de manera más confiable sino más eficiente (especialmente para Java).
Pero es posible que haya estado buscando herramientas equivocadas, si parecen demasiado complicadas. El enlace de datos usando JAXB o XStream es simple; pero para una salida XML simple y directa, voy con 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 tiene que usar la biblioteca para analizar XML, pero vea esta pregunta
¿Qué consideraciones deberían hacerse antes de reinventar la rueda?
antes de comenzar a escribir su propio código para analizar / generar xml.