首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Transformer空元素

Java Transformer空元素
EN

Stack Overflow用户
提问于 2018-09-11 15:27:25
回答 1查看 915关注 0票数 0

我编写了一个程序(我正在使用JDK 11)来格式化XML字符串;但是,我希望我的程序收缩空元素。例如:<element></element>应该变成<element/>。我已经写了下面的代码,它不能工作:

代码语言:javascript
复制
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.setOutputProperty("http://www.oracle.com/xml/is-standalone", "yes");
        transformer.setOutputProperty(OutputKeys.INDENT,"yes");
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,"no");
        transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,"yes");
        transformer.setOutputProperty(OutputKeys.METHOD,"xml");
        transformer.transform(new DOMSource(unformattedXml),new StreamResult(stringWriter));
        return stringWriter.toString();

如何收缩空元素?

EN

回答 1

Stack Overflow用户

发布于 2018-09-11 15:39:31

我不知道您使用的是哪些XML库。我刚刚尝试了原始安装,对我来说工作得很好。

代码语言:javascript
复制
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
//from w  w  w.  ja  va2 s.c om
import org.w3c.dom.Document;
import org.xml.sax.InputSource;

public class Transform {

    public static void main(String[] args) throws Exception {
        String unformattedXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
                + "<note>\n"
                + "  <to>example</to>\n"
                + "  <from>Server</from>\n"
                + "  <heading>Reminder</heading>\n"
                + "  <body></body>\n"
                + "</note>";
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.setOutputProperty("http://www.oracle.com/xml/is-standalone", "yes");
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
        transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "yes");
        transformer.setOutputProperty(OutputKeys.METHOD, "xml");
        StringWriter stringWriter = new StringWriter();
        transformer.transform(new DOMSource(convertStringToDocument(unformattedXml).getDocumentElement()), new StreamResult(stringWriter));
        String s = stringWriter.toString();
        System.out.println(s);
    }

    private static Document convertStringToDocument(String xmlStr) {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder;
        try {
            builder = factory.newDocumentBuilder();
            Document doc = builder.parse(new InputSource(new StringReader(xmlStr)));
            return doc;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

输出:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>example</to>
  <from>Server</from>
  <heading>Reminder</heading>
  <body/>
</note>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52270774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档