2013-10-15 22 views
1

我用這樣的代碼中創建XML:創建XML使用流,編碼屬性丟失

public static void main(String[] args) { 
     XMLOutputFactory factory  = XMLOutputFactory.newInstance(); 
     XMLEventFactory eventFactory = XMLEventFactory.newInstance(); 
     try { 
      XMLEventWriter writer = 
        factory.createXMLEventWriter(System.out); 

      XMLEvent event = eventFactory.createStartDocument("utf-8"); 
      writer.add(event); 

      event = eventFactory.createStartElement(
        "", "", "test"); 
      writer.add(event); 
      event = eventFactory.createEndElement(
        "", "", "test"); 
      writer.add(event); 
      writer.flush(); 
      writer.close(); 
     } catch (XMLStreamException e) { 
      e.printStackTrace(); 
     } 
    } 

但在頭屬性編碼丟失。哪裏不對?

回答

1

只有「utf-8」缺少編碼。如果您指定了不同的編碼,則編碼將包含在XML聲明中。 UTF-8是XML的默認編碼,所以這不是一個真正的錯誤。

但是,如果您沒有使用System.out即使對於「UTF-8」也包含編碼。這裏例如用StringWriter

public static void main(String[] args) { 
    XMLOutputFactory factory  = XMLOutputFactory.newInstance(); 
    XMLEventFactory eventFactory = XMLEventFactory.newInstance(); 
    try { 

    StringWriter sw = new StringWriter(); 

    XMLEventWriter writer = 
     factory.createXMLEventWriter(sw); 

    XMLEvent event = eventFactory.createStartDocument("utf-8"); 
    writer.add(event); 

    event = eventFactory.createStartElement(
     "", "", "test"); 
    writer.add(event); 
    event = eventFactory.createEndElement(
     "", "", "test"); 
    writer.add(event); 
    writer.flush(); 
    writer.close(); 

    sw.close(); 
    System.out.println(sw.toString()); 

    } catch (XMLStreamException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
} 

那麼結果是:<?xml version="1.0" encoding="utf-8"?><test></test>