10

我正在使用javax.xml.transform.Transformer类将 DOM 源转换为 XML 字符串。我在 DOM 树中有一些空元素,这些元素成为我不想要的一个标签。

我如何防止<sampletag></sampletag>成为<sampletag/>

4

5 回答 5

3

我有同样的问题。这是获得该结果的函数。

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;
}
于 2016-09-30T14:28:06.433 回答
2

如果您通过发送它的过程需要元素不要自关闭(它不应该),您可以通过在其中放置内容来强制元素不要自关闭。

PDF 转换器如何处理 XML 注释或处理指令?

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

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

于 2010-09-20T16:47:59.593 回答
2

如果您想控制 XML 的格式,请提供您自己的ContentHandler以将 XML 美化为“文本”。接收端(除非是人类)是否接收<name></name><name/>- 它们都意味着同一件事,这应该无关紧要。

于 2010-09-20T13:18:43.520 回答
2

这两种表示形式等价于 XML 解析器,所以没关系。

如果您想使用 XML 解析器以外的任何东西来处理 XML,那么最终您将需要做大量的工作和一个 XML 解析器。

于 2010-09-20T15:23:54.093 回答
1

我在下面尝试防止将空标签转换为单个标签:

变压器 tf = TransformerFactory.newInstance().newTransformer(); tf.setOutputProperty(OutputKeys.METHOD,"html")

它保留空标签。

于 2021-11-09T08:20:02.563 回答