从没有任何API的XML文件生成java文件 [英] Generate java file from XML file without any API

查看:145
本文介绍了从没有任何API的XML文件生成java文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何生成Java文件,意味着生成类的方法属性的名称,而不使用任何来自XML的API



我的XML文件:源

 < class name =person> 

< Attribut type =int> Age< / Attribut>
< Attribut type =String> Name< / Attribut>
< / class>

到java文件:

  public class person {
int age;
字符串名称;
}

您的帮助非常赞赏



谢谢

解决方案

如果您还想自己做。您可能会看到这个简化的例子。



首先警告:




  • 它缺少适当的异常处理

  • 它只适用于您提出的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;
默认值:
break;
}
parser.next();
}
} finally {
if(parser!= null){
parser.close();
}
}
返回源;
}

static void processEndElement(XMLStreamReader reader,StringBuilder sb){
String element = reader.getLocalName();
if(class.equals(element)){
sb.append(});
} else if(Attribut.equals(element)){
sb.append(; \\\
);
}
}

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 {\\\
);
} 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;
字符串名称;
}

剩下的唯一的事情:实现所有缺少的部分。如果这仍然包含太多XML API ...好...写你自己的解析器。 ; - )


How can I generate Java file, means generate name of classes methods attributes, without using any API from XML

my XML file : Source

<class name="person">

<Attribut type="int">Age</Attribut>
<Attribut type="String">Name</Attribut>
</class>

to java file:

 public class person {
    int age;
    String Name;
 }

Your help is very appreciated

Thank you

解决方案

If you still want to do it your own. You might have a look on this simplified example.

Warnings first:

  • it lacks proper Exception handling
  • it is build only to work with your proposed XML example

The sample code

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));
        }
    }
}

Assuming source.xml contains

<class name="person">
<Attribut type="int">Age</Attribut>
<Attribut type="String">Name</Attribut>
</class>

the code prints

public class person {
    int Age;
    String Name;
}

The "only" thing left for you to do: implement all the missing parts. If this still contains "too much" XML API ... well ... write you own parser. ;-)

这篇关于从没有任何API的XML文件生成java文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆