Java Transformer空元素

Java Transformer空元素,java,xml,javax.xml,Java,Xml,Javax.xml,我编写了一个程序(我使用JDK11)来格式化XML字符串;但是,我希望我的程序收缩空元素。例如:应该变成。我已经编写了以下不起作用的代码: Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty("http://www.oracle.com/xml/is-standalone", "yes");

我编写了一个程序(我使用JDK11)来格式化XML字符串;但是,我希望我的程序收缩空元素。例如:
应该变成
。我已经编写了以下不起作用的代码:

        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();

如何收缩空元素

我不知道您正在使用哪些XML库。我刚刚尝试了原始安装,效果很好

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;
    }
}
导入java.io.StringReader;
导入java.io.StringWriter;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.transform.OutputKeys;
导入javax.xml.transform.Transformer;
导入javax.xml.transform.TransformerFactory;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
//从w。ja va2 s.c om
导入org.w3c.dom.Document;
导入org.xml.sax.InputSource;
公共类转换{
公共静态void main(字符串[]args)引发异常{
字符串未格式化dxml=“\n”
+“\n”
+“示例\n”
+“服务器\n”
+“提醒\n”
+“\n”
+ "";
Transformer Transformer=TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(“http://www.oracle.com/xml/is-standalone“,“是”);
transformer.setOutputProperty(OutputKeys.INDENT,“是”);
setOutputProperty(OutputKeys.OMIT_XML_声明,“no”);
setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,“是”);
setOutputProperty(OutputKeys.METHOD,“xml”);
StringWriter StringWriter=新StringWriter();
transform(新的DOMSource(convertStringToDocument(unformatedXML).getDocumentElement()),新的StreamResult(stringWriter));
字符串s=stringWriter.toString();
系统输出打印项次;
}
私有静态文档convertStringToDocument(字符串xmlStr){
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
文档生成器;
试一试{
builder=factory.newDocumentBuilder();
documentdoc=builder.parse(新的InputSource(新的StringReader(xmlStr));
退货单;
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
}
输出:

<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>example</to>
  <from>Server</from>
  <heading>Reminder</heading>
  <body/>
</note>

实例
服务器
提醒

这些是我的导入:导入javax.xml.parsers.DocumentBuilder;导入javax.xml.parsers.DocumentBuilderFactory;导入javax.xml.parsers.parserConfiguration异常;导入javax.xml.transform.*;导入javax.xml.transform.dom.DOMSource;导入javax.xml.transform.stream.StreamResult;也许它与jdk 11有关?如果它不可复制,问题应该是closed@RobotWizard尝试调试,将加载哪个DocumentBuilder。它将由DocumentBuilderFactory加载,您得到的Transformer类的实际实现是什么。在debug中可以看到,然后它将更容易推荐。@可选这是加载com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl的DocumentBuilder,这是加载com.sun.org.apache.xalan.internal.xsltc.trax.transformerImpl的Transformer。我有相同的Transformer和DocumentBuilder。我用jdk 11制作了这个,它是无法复制您使用的输入字符串是什么?
Document Document=db.parse(新的ByteArrayInputStream(“.getBytes”(“UTF-8”)输出:
使用我的代码,您的输入工作正常。能否尝试将
“\n”
作为输入?
\n
是有效字符,因此它不是空元素!