用javax.xml.parsers.DocumentBuilder在XML Document中添加其它类型的Element都没问题,但是在添加<!DOCTYPE jasperReport PUBLIC ..." "...">时遇到了难题,不知该用什么方法,还是需要别的类,网上没找到,烦请高手指点。

解决方案 »

  1.   

    发个例子:
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    import org.jdom.Attribute;
    import org.jdom.DocType;
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.ProcessingInstruction;
    import org.jdom.output.Format;
    import org.jdom.output.XMLOutputter;public class ProduceXMl {
     
     
     public static void main(String[] args) throws IOException {
      
      Document doc = new Document(); //&acute;&acute;&frac12;¨&iquest;&Otilde;°×&Icirc;&Auml;&micro;&micro;
      
      /*
       * &acute;&acute;&frac12;¨PI&sup2;&cent;&Igrave;í&frac14;&Oacute;&micro;&frac12;&Icirc;&Auml;&micro;&micro;
       */
      Map map = new HashMap();
      map.put("type","text/xsl");
      map.put("href","products.xsl");
      ProcessingInstruction pi = new ProcessingInstruction("xml-stylesheet",map);//&acute;&brvbar;&Agrave;í&Ouml;&cedil;&Aacute;&icirc; 
      //&frac12;&laquo;&acute;&brvbar;&Agrave;í&Ouml;&cedil;&Aacute;&icirc;&Igrave;í&frac14;&Oacute;
      doc.addContent(pi);
      
            /*
             * &acute;&acute;&frac12;¨&Icirc;&Auml;&micro;&micro;&Agrave;à&ETH;&Iacute;&sup2;&cent;&Igrave;í&frac14;&Oacute;&micro;&frac12;&Icirc;&Auml;&micro;&micro;
             */
      DocType  type  = new DocType("productsDetails"); //&Icirc;&Auml;&micro;&micro;&Agrave;à&ETH;&Iacute;
      type.setPublicID("public.dtd");    //&Eacute;è&Icirc;&ordf; public
      //type.setSystemID("system.dtd");   //&Eacute;è&Icirc;&ordf; system
      //&Igrave;í&frac14;&Oacute;&Icirc;&Auml;&micro;&micro;&Agrave;à&ETH;&Iacute;
      doc.addContent(type); 
      
      Element root = new Element("productsDetails"); //&acute;&acute;&frac12;¨&Ograve;&raquo;&cedil;&ouml;&Ocirc;&ordf;&Euml;&Oslash;
      doc.setRootElement(root); //&frac12;&laquo;&cedil;&Atilde;&Ocirc;&ordf;&Euml;&Oslash;×&ouml;&Icirc;&ordf;&cedil;ù&Ocirc;&ordf;&Euml;&Oslash;
      
      Element product = new Element("product");
      root.addContent(product); //&frac12;&laquo;product×&ouml;&Icirc;&ordf;productsDetails&micro;&Auml;×&Oacute;&Ocirc;&ordf;&Euml;&Oslash;
      
      Attribute  att = new Attribute("productID","0001"); //&acute;&acute;&frac12;¨&Ecirc;&ocirc;&ETH;&Ocirc;
      product.setAttribute(att); //&Icirc;&ordf;product&Eacute;è&Ouml;&Atilde;&Ecirc;&ocirc;&ETH;&Ocirc;
      
      //&Icirc;&ordf;product&acute;&acute;&frac12;¨×&Oacute;&Ocirc;&ordf;&Euml;&Oslash;&pound;&not;&sup2;&cent;&frac12;&laquo;&AElig;&auml;content·&Ouml;±&eth;&Eacute;è&Icirc;&ordf;100.00,red
      product.addContent(new Element("rate").setText("100.00"));
      product.addContent(new Element("color").setText("&ordm;ì&Eacute;&laquo;"));
      
      /*
       * &cedil;&ntilde;&Ecirc;&frac12;&raquo;&macr;&Ecirc;&auml;&sup3;&ouml;
       */
      XMLOutputter outp = new XMLOutputter();//&Oacute;&Atilde;&Oacute;&Uacute;&Ecirc;&auml;&sup3;&ouml;jdom &Icirc;&Auml;&micro;&micro;
      Format format=Format.getPrettyFormat(); //&cedil;&ntilde;&Ecirc;&frac12;&raquo;&macr;&Icirc;&Auml;&micro;&micro;
      format.setEncoding("GBK"); //&Oacute;&Eacute;&Oacute;&Uacute;&Auml;&not;&Egrave;&Iuml;&micro;&Auml;±à&Acirc;&euml;&Ecirc;&Ccedil;utf-8,&Ouml;&ETH;&Icirc;&Auml;&frac12;&laquo;&Iuml;&Ocirc;&Ecirc;&frac34;&Icirc;&ordf;&Acirc;&Ograve;&Acirc;&euml;&pound;&not;&Euml;ù&Ograve;&Ocirc;&Eacute;è&Icirc;&ordf;gbk
      outp.setFormat(format);
      outp.output(doc,System.out); //&Ecirc;&auml;&sup3;&ouml;&Icirc;&Auml;&micro;&micro;
      
     }
    }
      

  2.   

    W3C 的 DOM Level 3 Core Specification 中,DocumentType 节点是 read only 的。JDK 中的 DOM 实现遵循上述规范,也就是说使用 JDK 中的 DOM 实现无法修改文档类型。
      

  3.   

    多谢楼上朋友。看了一下,org.w3c.dom.Document的Doctype的确是只读,JDK又遵循W3C,那么就只好用org.jdom.Document了。