2010-09-20 8 views
9

Ich verwende javax.xml.transform.Transformer Klasse, um die DOM-Quelle in XML-Zeichenfolge zu transformieren. Ich habe einige leere Elemente im DOM-Baum, und diese werden zu einem Tag, den ich nicht möchte.Wie zu verhindern, dass XML-Transformer leere Tags in einzelne Tags umwandeln

Wie verhindere ich, dass <sampletag></sampletag><sampletag/> wird?

+0

warum wollen Sie es nicht? Sie sind beide gültig. – Bozho

+0

@ Bozho Regexs. Und ich denke, wir wissen, was passiert, wenn Sie regexs verwenden, um XML zu analysieren. –

+1

Sie meinen, aus werden? –

Antwort

2

Wenn Sie steuern möchten, wie XML formatiert wird, geben Sie ContentHandler ein, um XML in "text" zu verschönern. Es sollte dem empfangenden Ende (außer menschlich) egal sein, ob es <name></name> oder <name/> erhält - sie bedeuten beide dasselbe.

+0

Dieses XML wird dann in ein PDF konvertiert, und ich habe keine Kontrolle über die PDF-Konverter-Methode, also brauche ich die Tags, um ihre Verwendung zu erhalten. – mosahin

2

Die beiden Darstellungen sind äquivalent zu einem XML-Parser, also spielt es keine Rolle.

Wenn Sie XML mit etwas anderem als einem XML-Parser verarbeiten wollen, werden Sie sowieso viel Arbeit und einen XML-Parser haben.

2

Wenn der Prozess es durch NEEDS das Element nicht selbstschließend (was es nicht sollte) senden, können Sie das Element zwingen, nicht selbstschließend zu sein, indem Sie Inhalt darin platzieren.

Wie verarbeitet der PDF-Konverter XML-Kommentare oder Verarbeitungsanweisungen?

<sampletag>!<--Sample Comment--></sampletag>

<sampletag><?SampleProcessingInstruction?></sampletag>

2

hade ich das gleiche Problem. Dies ist die Funktion, um dieses Ergebnis zu erhalten.

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; 
}