2016-06-06 2 views
0

Мне нужно создать XML-документ, который может заканчиваться косой чертой, если XML элемент находится в одной строке (<test/> вместо <test></test>)Создание XML-документа, который может заканчиваться косой чертой («<test />„вместо“<test></test>»)

Вот пример кода для создания XML Docs следующим

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<cars><supercars company="Ferrari"> 
<carname type="formula one"></carname> 
<carname type="sports"></carname> 
</supercars></cars> 

Но я хочу, чтобы XML-документы должны быть, как это

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<cars><supercars company="Ferrari"> 
<carname type="formula one"/> 
<carname type="sports"/> 
</supercars></cars> 

Обратите внимание, что нет </carname >

import java.io.IOException; 
import java.io.StringWriter; 

import javax.xml.stream.XMLOutputFactory; 
import javax.xml.stream.XMLStreamException; 
import javax.xml.stream.XMLStreamWriter; 

public class StAXCreateXMLDemo { 
    public static void main(String[] args) { 
    try { 
    StringWriter stringWriter = new StringWriter(); 

    XMLOutputFactory xMLOutputFactory = XMLOutputFactory.newInstance();  
    XMLStreamWriter xMLStreamWriter = xMLOutputFactory.createXMLStreamWriter(stringWriter); 

    xMLStreamWriter.writeStartDocument(); 
    xMLStreamWriter.writeStartElement("cars"); 

    xMLStreamWriter.writeStartElement("supercars");    
    xMLStreamWriter.writeAttribute("company", "Ferrari"); 

    xMLStreamWriter.writeStartElement("carname");   
    xMLStreamWriter.writeAttribute("type", "formula one"); 

    xMLStreamWriter.writeEndElement(); 

    xMLStreamWriter.writeStartElement("carname");   
    xMLStreamWriter.writeAttribute("type", "sports"); 

    xMLStreamWriter.writeEndElement(); 

    xMLStreamWriter.writeEndElement(); 
    xMLStreamWriter.writeEndDocument(); 

    xMLStreamWriter.flush(); 
    xMLStreamWriter.close(); 

    String xmlString = stringWriter.getBuffer().toString(); 

    stringWriter.close(); 

    System.out.println(xmlString); 

    } catch (XMLStreamException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    } 
    } 
+0

вы бы нужно указать java, что вы хотите создать тег singleton. без dtd, java просто предположил бы, что создаваемый вами тэг НЕ является одиночным, и может содержать другие теги, и дает вам версию ''. –

ответ

2

Это может быть достигнуто с помощью XMLStreamWriter.writeEmptyElement:

Вместо того

xMLStreamWriter.writeStartElement("carname"); 
xMLStreamWriter.writeAttribute("type", "formula one"); 
xMLStreamWriter.writeEndElement(); 

Используйте

xMLStreamWriter.writeEmptyElement("carname"); 
xMLStreamWriter.writeAttribute("type", "formula one"); 
Смежные вопросы