Est-il essentiel d'utiliser des bibliothèques pour manipuler du XML ?

StackOverflow https://stackoverflow.com/questions/24866

  •  09-06-2019
  •  | 
  •  

Question

J'utilise le back-end Java pour créer une chaîne XML qui est transmise au navigateur.Actuellement, j'utilise une simple manipulation de chaînes pour produire ce XML.Est-il essentiel que j'utilise une bibliothèque XML en Java pour produire la chaîne XML ?Je trouve les bibliothèques très difficiles à utiliser par rapport à ce dont j'ai besoin.

Était-ce utile?

La solution

Ce n'est pas indispensable, mais conseillé.Cependant, si la manipulation de chaînes fonctionne pour vous, alors foncez !Il existe de nombreux cas dans lesquels un texte XML petit ou simple peut être construit manuellement en toute sécurité.

Sachez simplement que la création de texte XML est plus difficile qu’il n’y paraît.Voici quelques critères que je considérerais :

  • D'abord:combien contrôle avez-vous les informations qui entrent dans le XML ?

Moins vous avez de contrôle sur les données sources, plus vous risquez d'avoir des problèmes et plus la bibliothèque devient avantageuse.Par exemple:(a) Pouvez-vous garantie que les noms d'éléments n'auront jamais de caractère illégal dans un nom ?(b) Qu'en est-il des guillemets dans le contenu d'un attribut ?Peuvent-ils se produire et les gérez-vous ?(c) Les données contiennent-elles quelque chose qui pourrait devoir être codé en tant que entité (comme le moins que qui doit souvent être affiché sous forme de <);est-ce que tu le fais correctement ?

  • Deuxièmement, la maintenabilité :le code qui construit le XML est-il facile à comprendre par quelqu'un d'autre?

Vous ne voulez probablement pas rester coincé avec le code à vie.J'ai travaillé avec du code C++ d'occasion qui construit manuellement du XML et cela peut être étonnamment obscur.Bien sûr, s'il s'agit d'un de vos projets personnels, vous n'avez pas à vous soucier des « autres » :remplacez « dans un an » par « autres » ci-dessus.

Je ne m'inquiéterais pas des performances.Si votre XML est suffisamment simple pour que vous puissiez l'écrire manuellement, toute surcharge de la bibliothèque n'a probablement aucun sens.Bien sûr, votre cas peut être différent, mais vous devez d’abord mesurer pour le prouver.

Enfin, oui ;vous pouvez créer manuellement du texte XML si c'est assez simple ;mais ne pas connaître les bibliothèques disponibles est probablement pas la bonne raison.

Une bibliothèque XML moderne est un outil assez puissant, mais il peut aussi être intimidant.Cependant, apprendre les bases de votre bibliothèque XML n’est pas si difficile, et cela peut s’avérer très pratique ;entre autres choses, c'est presque une condition requise sur le marché du travail d'aujourd'hui.Ne vous enlisez pas dans les espaces de noms, les schémas et autres fonctionnalités plus sophistiquées jusqu'à ce que vous ayez l'essentiel.

Bonne chance.

Autres conseils

XML est difficile.S'analyser soi-même est une mauvaise idée, c'est encore pire de générer du contenu soi-même.Jetez un œil à la spécification XML 1.1.

Vous devez gérer des éléments tels que le codage approprié, le codage d'attributs (par exemple, produit du XML non valide), l'échappement CDATA approprié, le codage UTF, les entités DTD personnalisées, et cela sans ajouter le mélange d'espaces de noms XML avec l'espace de noms par défaut/vide, les attributs d'espace de noms. , etc.

Apprenez une boîte à outils, il y en a beaucoup disponibles.

Je pense que la manipulation de chaînes personnalisées est une bonne chose, mais vous devez garder deux choses à l'esprit :

  1. Votre code n'est pas aussi mature que la bibliothèque.Prévoyez du temps dans votre plan pour gérer les bugs qui apparaissent.
  2. Votre approche ne sera probablement pas aussi évolutive qu'une bibliothèque tierce lorsque le XML commencera à se développer (à la fois en termes de performances et de facilité d'utilisation).

Je connais une base de code qui utilise une manipulation de chaînes personnalisée pour la sortie XML (et une bibliothèque tierce pour l'entrée).C'était bien au début mais c'est devenu un vrai problème au bout d'un moment.

Oui, utilisez la bibliothèque.

Quelqu'un a pris le temps et les efforts nécessaires pour créer quelque chose qui est généralement meilleur que ce que vous pourriez imaginer.La manipulation de chaînes sert à renvoyer un seul nœud, mais une fois que vous aurez besoin de manipuler le DOM ou d'utiliser une requête XPath, la bibliothèque vous sauvera.

En n'utilisant pas de bibliothèque, vous risquez de générer ou d'analyser des données mal formées, qui tôt ou tard volonté arriver.Pour la même raison document.write n'est pas autorisé en XHTML, vous ne devez pas écrire votre balisage XML sous forme de chaîne.

Oui.

Cela n'a aucun sens de sauter l'outil essentiel :même écrire du XML n'est pas trivial car il faut échapper à ces esperluettes et lts, ​​sans parler des liaisons d'espace de noms (si nécessaire).Et en fin de compte, les bibliothèques peuvent généralement lire et écrire du XML non seulement de manière plus fiable mais plus efficace (en particulier.donc pour Java).

Mais vous avez peut-être choisi de mauvais outils, s’ils semblent trop compliqués.La liaison de données à l'aide de JAXB ou XStream est simple ;mais pour une sortie XML simple et directe, j'utilise StaxMate.Cela peut en fait simplifier la tâche de plusieurs manières (ferme automatiquement les balises de début, écrit des déclarations d'espace de noms si nécessaire, etc.).

Non - Si vous pouvez l'analyser vous-même (comme vous le faites) et qu'il s'adapte à vos besoins, vous n'avez besoin d'aucune bibliothèque.

Assurez-vous simplement que vos besoins futurs seront satisfaits - la création de fichiers XML complexes est mieux réalisée à l'aide de bibliothèques - dont certaines sont également disponibles dans des versions très simples.

La seule fois où j'ai fait quelque chose comme ça dans du code de production, c'était lorsqu'un collègue et moi avons construit un pré-processeur afin que nous puissions intégrer des fragments XML provenant d'autres fichiers dans un XML plus grand.Au chargement, nous analyserions d'abord ces intégrations (références de fichiers dans les chaînes de commentaires XML) et les remplacerions par le fragment réel auquel ils ont fait référence.Ensuite, nous transmettrions le résultat combiné à l'analyseur XML.

Vous n'êtes pas obligé d'utiliser une bibliothèque pour analyser XML, mais consultez cette question
Quelles considérations faut-il prendre en compte avant de réinventer la roue ?
avant de commencer à écrire votre propre code pour analyser/générer du XML.

Non - surtout pour la génération (je serais moins enclin à l'analyse car le texte saisi peut toujours vous surprendre).Je pense que c'est bien - mais soyez prêt à passer à une bibliothèque si vous passez plus de quelques minutes à maintenir votre propre code.

Je ne pense pas qu'utiliser l'API DOM XML fournie avec le JDK soit difficile, il est facile de créer des nœuds Element, des attributs, etc...et plus tard, il est facile de convertir des chaînes en un document DOM ou des documents DOM en une chaîne

Dans la première page, Google trouve des résultats en Espagne (exemple XML en espagnol):

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top