Как запретить преобразователю xml преобразовывать пустые теги в один тег - PullRequest
9 голосов
/ 20 сентября 2010

Я использую класс javax.xml.transform.Transformer для преобразования источника DOM в строку XML. У меня есть несколько пустых элементов в дереве DOM, и они становятся одним тегом, который мне не нужен.

Как мне помешать <sampletag></sampletag> стать <sampletag/>?

Ответы [ 4 ]

3 голосов
/ 30 сентября 2016

У меня такая же проблема. Это функция для получения этого результата.

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;
}
2 голосов
/ 20 сентября 2010

Два представления эквивалентны синтаксическому анализатору XML, поэтому это не имеет значения.

Если вы хотите обрабатывать XML с помощью чего-то еще, кроме XML-парсера, вам все равно придется много работать и XML-парсер.

2 голосов
/ 20 сентября 2010

Если процесс, который вы отправляете через NEEDS элемент, который не должен быть самозакрывающимся (что не должно быть), вы можете заставить элемент не быть самозакрывающимся, поместив содержимое внутри него.

Как конвертер PDF обрабатывает комментарии XML или инструкции по обработке?

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

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

2 голосов
/ 20 сентября 2010

Если вы хотите контролировать формат XML, предоставьте свой собственный ContentHandler, чтобы предварительно преобразовать XML в «текст». Для принимающей стороны (кроме человека) не должно иметь значения, получает ли он <name></name> или <name/> - они оба означают одно и то же.

...