Java 如何从 xml 文档中删除 <?xml version="1.0" encoding="UTF-8" standalone="no"?>

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20953830/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 05:32:36  来源:igfitidea点击:

How to delete <?xml version="1.0" encoding="UTF-8" standalone="no"?> from xml document

java

提问by Tom Cruise

I wrote code for tests - it creates simple XML document. My problem is that created document contains unneeded data in first node . Is any way to delete or modify this node <?xml version="1.0" encoding="UTF-8" standalone="no"?>?

我为测试编写了代码——它创建了简单的 XML 文档。我的问题是创建的文档在第一个节点中包含不需要的数据。有没有办法删除或修改这个节点<?xml version="1.0" encoding="UTF-8" standalone="no"?>

import java.io.ByteArrayOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class MyTestClass {

    public static void main(String argv[]) {

      try {
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

        // root elements
        Document doc = docBuilder.newDocument();
        Element rootElement = doc.createElement("company");
        doc.appendChild(rootElement);

        // staff elements
        Element staff = doc.createElement("Staff");
        rootElement.appendChild(staff);

        // firstname elements
        Element firstname = doc.createElement("firstname");
        firstname.appendChild(doc.createTextNode("yong"));
        staff.appendChild(firstname);

        // lastname elements
        Element lastname = doc.createElement("lastname");
        lastname.appendChild(doc.createTextNode("mook kim"));
        staff.appendChild(lastname);

        // nickname elements
        Element nickname = doc.createElement("nickname");
        nickname.appendChild(doc.createTextNode("mkyong"));
        staff.appendChild(nickname);

        // salary elements
        Element salary = doc.createElement("salary");
        salary.appendChild(doc.createTextNode("100000"));
        staff.appendChild(salary);

        Transformer t = TransformerFactory.newInstance().newTransformer();
        ByteArrayOutputStream s = new ByteArrayOutputStream();
        t.setOutputProperty(OutputKeys.INDENT, "yes");
        t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
        t.transform(new DOMSource(doc),new StreamResult(s));
        System.out.println(new String(s.toByteArray()));
      } catch (ParserConfigurationException pce) {
        pce.printStackTrace();
      } catch (TransformerException tfe) {
        tfe.printStackTrace();
      }
    }
}

It returns:

它返回:

 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 
 <company>  
  <Staff>
     <firstname>yong</firstname>
     <lastname>mook kim</lastname>
     <nickname>mkyong</nickname>
     <salary>100000</salary>   
  </Staff> 
 </company>

Is any way to delete or modify this node <?xml version="1.0" encoding="UTF-8" standalone="no"?>?

有没有办法删除或修改这个节点<?xml version="1.0" encoding="UTF-8" standalone="no"?>

采纳答案by Paul Whelan

You can add the following to your Transformer

您可以将以下内容添加到您的 Transformer

t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");

see herefor details

详情请看这里