如何防止xml转换器将空标签转换为单个标签

发布于 2024-09-24 07:27:14 字数 186 浏览 2 评论 0原文

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

如何防止 变成

I'm using javax.xml.transform.Transformer class to transform the DOM source into XML string. I have some empty elements in DOM tree, and these become one tag which I don't want.

How do I prevent <sampletag></sampletag> from becoming <sampletag/>?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

紫罗兰の梦幻 2024-10-01 07:27:14

我也遇到了同样的问题。
这是获得该结果的函数。

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

I hade the same problem.
This is the function to get that result.

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;
}
世态炎凉 2024-10-01 07:27:14

如果您想控制 XML 的格式化方式,请提供您自己的 ContentHandler 将 XML 美化为“文本”。对于接收端(除非是人类)来说,它是否接收 并不重要 - 它们都意味着同样的事情。

If you want to control how XML is formatted, provide your own ContentHandler to prettify XML into "text". It should not matter to the receiving end (unless human) whether it receives <name></name> or <name/> - they both mean the same thing.

眼睛会笑 2024-10-01 07:27:14

这两种表示方式相当于一个XML解析器,所以没有关系。

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

The two representations are equivalent to an XML parser, so it doesn't matter.

If you want to process XML with anything else than an XML-parser, you will end up with a lot of work and an XML-parser anyway.

乄_柒ぐ汐 2024-10-01 07:27:14

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

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

!<--示例注释-->

If the process you are sending it through NEEDS the element not to be self-closing (which it should not), you can force the element not to be self-closing by placing content inside of it.

How does the PDF converter handle XML comments or processing instructions?

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

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

戏剧牡丹亭 2024-10-01 07:27:14

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

Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.setOutputProperty(OutputKeys.METHOD,"html")

它保留空标签。

I tried below to prevent transform empty tags into single tag :

Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.setOutputProperty(OutputKeys.METHOD,"html")

It's retaining empty tags.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文