Java生成自定义xml文件_自定义xml,然后根据xml生成java类

设计的思想其实很简单:1、使用xml定义生成规则;2使用Document解析xml然后生成java类。

一、xml定义规则。

本实例使用dtd来定义xml文件的标签。

config.dtd文件:

config. xml文件:

这样在config.xml中配置了一个gen标签(该标签为xml的根元素,在dtd中定义了),由于dtd文件中定义了gen标签里有ID属性id,故在java中可以使用getElementById来获得该元素,进而获得该元素的其他属性。gen标签的author元素用来生成java类的注释。

service标签中的dbname和prefix都是用来生成类的组成部分。规则隐匿在java类内部。

二、解析xml生成java类。

1.得到xml的Document:

public Document getDocument(InputStream inputStream,File file){

InputSource inputSource = new InputSource(inputStream);

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

try { //这两行决定可以根据id得到element

factory.setNamespaceAware(true);

factory.setValidating(true);

DocumentBuilder builder = factory.newDocumentBuilder();

return builder.parse(inputSource);

} catch (Exception e) {

e.printStackTrace();

System.out.println("it occurs wrong in the getDocument method...");

return null;

}

}inputStream为config.xml文件流。file为以后扩展使用。

2.解析xml:

主要需要用到的几个方法

InputStream inputStream = new FileInputStream(file);

Document doc = getDocument(inputStream,file);

Element gen = doc.getElementById("generator");

String author = gen.getAttribute("author");

NodeList serviceList = doc.getElementsByTagName("service");

if(serviceList!=null&&serviceList.getLength()>0){

for(int i=0;i<=serviceList.getLength()-1;i++){

Element service = (Element) serviceList.item(i);

String dbname = service.getAttribute("dbname");

String prefix = service.getAttribute("prefix");

...

}

System.out.println("generator success...");

} 3.生成java文件:

最后一步就是使用IO流,并根据得到的这些元素,根据自定义的规则拼成Java的内容,然后用流写出即可。

其实这是最简单的思路。有很大的优化的可能性。比如使用Schema替代dtd;使用Java文件做模版,先读进来然后使用正则表达式进行相应替换后再写出即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成行为树XML文件的过程可以分为以下几个步骤: 1. 定义行为树的结构 首先需要定义行为树的结构,例如行为树节点的类型、节点之间的关系、节点的属性等。可以使用Java类来表示行为树节点,使用类之间的继承关系来表示节点之间的关系,使用类的属性来表示节点的属性。 2. 创建行为树节点 根据定义好的行为树结构,创建行为树节点对象,并设置节点的属性和关系。可以使用Java的反射机制,根据类的名称动态创建对象,并调用对象的方法来设置属性和关系。 3. 将节点添加到行为树中 将创建好的行为树节点添加到行为树中,可以使用Java的集合类来表示行为树,例如List、Map等。将节点添加到集合中,可以根据节点的类型和关系,将节点添加到相应的父节点下面。 4. 序列化行为树为XML文件 使用JavaXML序列化库,将创建好的行为树序列化为XML文件。可以使用DOM、SAX或者JAXB等不同的XML序列化方式,将行为树节点转换为XML元素,并将元素输出到XML文件中。 下面是一个简单的Java代码示例,演示如何生成一个行为树XML文件: ```java public class BehaviorTree { private List<Node> nodes = new ArrayList<>(); public void addNode(Node node) { nodes.add(node); } public void toXml(File file) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.newDocument(); Element root = doc.createElement("BehaviorTree"); doc.appendChild(root); for (Node node : nodes) { root.appendChild(node.toXml(doc)); } TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(file); transformer.transform(source, result); } } public abstract class Node { protected String name; public Node(String name) { this.name = name; } public String getName() { return name; } public abstract Element toXml(Document doc); } public class SelectorNode extends Node { private List<Node> children = new ArrayList<>(); public SelectorNode(String name) { super(name); } public void addChild(Node child) { children.add(child); } public List<Node> getChildren() { return children; } public Element toXml(Document doc) { Element element = doc.createElement("Selector"); element.setAttribute("name", name); for (Node child : children) { element.appendChild(child.toXml(doc)); } return element; } } public class ActionNode extends Node { public ActionNode(String name) { super(name); } public Element toXml(Document doc) { Element element = doc.createElement("Action"); element.setAttribute("name", name); return element; } } public class Main { public static void main(String[] args) throws Exception { BehaviorTree tree = new BehaviorTree(); SelectorNode root = new SelectorNode("Root"); tree.addNode(root); ActionNode action1 = new ActionNode("Action1"); root.addChild(action1); ActionNode action2 = new ActionNode("Action2"); root.addChild(action2); SelectorNode selector = new SelectorNode("Selector1"); root.addChild(selector); ActionNode action3 = new ActionNode("Action3"); selector.addChild(action3); ActionNode action4 = new ActionNode("Action4"); selector.addChild(action4); tree.toXml(new File("BehaviorTree.xml")); } } ``` 在上面的代码中,定义了一个行为树类BehaviorTree,可以添加节点,输出为XML文件定义了一个抽象类Node,表示行为树节点,包含一个toXml方法,返回节点的XML元素。定义了两个具体的节点类型,ActionNode和SelectorNode,SelectorNode包含了多个子节点。在Main函数中创建了一个简单的行为树,并输出为XML文件BehaviorTree.xml

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值