Если вы все еще хотите сделать это самостоятельно. Вы можете взглянуть на этот упрощенный пример.
Предупреждения первых:
- ему не хватает надлежащего обработки исключений
- это построить только для работы с предлагаемым например XML
Образец кода
import java.io.FileInputStream;
import java.io.IOException;
import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
public class XMLStreamReaderDemo {
public static void main(String[] args) throws Exception {
String xmlFileName = "source.xml";
StringBuilder javaSource = transform(xmlFileName);
System.out.println(javaSource);
}
static StringBuilder transform(String xmlFileName) throws
FactoryConfigurationError, IOException, XMLStreamException {
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader parser = null;
StringBuilder source = new StringBuilder();
try (FileInputStream inputStream = new FileInputStream(xmlFileName)) {
parser = factory.createXMLStreamReader(inputStream);
while (parser.hasNext()) {
switch (parser.getEventType()) {
case XMLStreamConstants.START_ELEMENT:
processStartElement(parser, source);
break;
case XMLStreamConstants.CHARACTERS:
processCharacters(parser, source);
break;
case XMLStreamConstants.END_ELEMENT:
processEndElement(parser, source);
break;
default:
break;
}
parser.next();
}
} finally {
if (parser != null) {
parser.close();
}
}
return source;
}
static void processEndElement(XMLStreamReader reader, StringBuilder sb) {
String element = reader.getLocalName();
if ("class".equals(element)) {
sb.append("}");
} else if ("Attribut".equals(element)) {
sb.append(";\n");
}
}
static void processCharacters(XMLStreamReader reader, StringBuilder sb) {
if (!reader.isWhiteSpace()) {
sb.append(" ").append(reader.getText());
}
}
static void processStartElement(XMLStreamReader reader, StringBuilder sb) {
String element = reader.getLocalName();
if ("class".equals(element)) {
sb.append("public class ")
.append(reader.getAttributeValue(0))
.append(" {\n");
} else if ("Attribut".equals(element)) {
sb.append(" ")
.append(reader.getAttributeValue(0));
}
}
}
Предполагая, что source.xml
содержит
<class name="person">
<Attribut type="int">Age</Attribut>
<Attribut type="String">Name</Attribut>
</class>
код выводит
public class person {
int Age;
String Name;
}
«единственной», что осталось для вас сделать: выполнить все недостающие части. Если это все еще содержит «слишком много» XML API ... ну ... напишите свой собственный парсер. ;-)
Пожалуйста, укажите пример источника, который объясняет, что вы пытались сделать. – SubOptimal
Если вы не хотите использовать какой-либо XML-API (например, [Simple API for XML] (https://docs.oracle.com/javase/tutorial/jaxp/sax/index.html)), вам нужно будет написать парсер себя. Почему вы хотите это сделать? Как вы сказали, вы не хотите использовать JAXB. Почему бы не использовать хотя бы SAX? – SubOptimal