10
votes

Comment prévenir le transformateur XML pour transformer les étiquettes vides en une seule étiquette

J'utilise javax.xml.transform.transformer classe pour transformer la source DOM en chaîne XML. J'ai des éléments vides dans Dom Tree, et ceux-ci deviennent une étiquette que je ne veux pas.

Comment puis-je empêcher de devenir ?


4 commentaires

Pourquoi tu n'en veux pas? Ils sont tous les deux valides.


@Bozho regexs. Et je pense que nous savons ce qui se passe si vous utilisez des regexs pour analyser XML.


Vous voulez dire, de devenir ?


@TOM: Oui, quelqu'un pose une nouvelle question à ce sujet. ;)


4 Réponses :


2
votes

Si vous souhaitez contrôler comment XML est formaté, fournissez votre propre contenthandler pour pire de xml dans "Texte". Cela ne devrait pas avoir d'importance à la fin de la réception (à moins que l'homme) si elle reçoit ou - ils signifient tous les deux la même chose.


1 commentaires

Ce XML sera ensuite converti en PDF et je n'ai aucun contrôle sur la méthode du convertisseur PDF, j'ai donc besoin des balises pour préserver leur utilisation.



2
votes

Les deux représentations sont équivalentes à un analyseur XML, de sorte que cela n'a pas d'importance.

Si vous souhaitez traiter XML avec autre chose qu'un analyseur XML, vous vous retrouverez avec beaucoup de travail et un analyseur XML quand même.


0 commentaires

2
votes

Si le processus que vous l'envoyez par Besoins l'élément ne doit pas être auto-fermeture (ce qu'il ne doit pas), vous pouvez forcer l'élément à ne pas se fermer de soi en plaçant le contenu à l'intérieur de ça.

Comment le convertisseur PDF gère-t-il des commentaires ou des instructions de traitement XML?

! <- Exemple de commentaire ->


0 commentaires

3
votes

J'ai eu le même problème. C'est la fonction pour obtenir ce résultat.

public static String fixClosedTag(String rawXml){

    LinkedList<String[]> listTags = new LinkedList<String[]>(); 
    String splittato[] =  rawXml.split("<");

    String prettyXML="";

    int counter = 0;
    for(int x=0;x<splittato.length;x++){
        String tmpStr = splittato[x];
        int indexEnd = tmpStr.indexOf("/>");
        if(indexEnd>-1){
            String nameTag = tmpStr.substring(0, (indexEnd));
            String oldTag = "<"+ nameTag +"/>";
            String newTag = "<"+ nameTag +"></"+ nameTag +">";
            String tag[]=new String [2];
            tag[0] = oldTag;
            tag[1] = newTag;
            listTags.add(tag);
        }
    }
    prettyXML = rawXml;

    for(int y=0;y<listTags.size();y++){
        String el[] = listTags.get(y);

        prettyXML = prettyXML.replaceAll(el[0],el[1]);
    }

    return prettyXML;
}


0 commentaires