之前用过的一些技术,是用xml描述页面字段,表单,列表的,然后利用后台引擎,自动的生成html页面;然后利用自己研发的胶水语言(类似于freemarker),进行类似继承,之类的去冗余定义;
然后自己做一个简单的解析,
xml定义代码
<?xml version="1.0" encoding="UTF-8"?>
<book id="1">//定义了一个根节点
//页面字段定义
<field name="Id" >
<nullable>false</nullable>
<type>string</type>
<length>10</length>
<maxlength>100</maxlength>
</field>
<field name="Name" >
<nullable>false</nullable>
<type>string</type>
<length>10</length>
<maxlength>100</maxlength>
</field>
<field name="Age" >
<nullable>false</nullable>
<type>int</type>
<length>10</length>
<maxlength>100</maxlength>
</field>
//列表显示字段定义
<fieldlist id="queryList">Name,age</fieldlist>
//表单内容定义
<layout id="queryLayout">Name,age</layout>
</book>
下面是简单的java解析代码
package com.fanshe;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class DomAnalysNew {
public static void analyOneLayer(Node node)
{ System.out.println("=========================field============================");
NodeList nodelist=node.getChildNodes();
for(int i=0;i<nodelist.getLength();i++)
{
Node nodeTemp=nodelist.item(i);
if(nodeTemp.getNodeType()==Node.ELEMENT_NODE)
{
System.out.println("节点名称:"+nodeTemp.getNodeName());
System.out.println("节点内容:"+nodeTemp.getFirstChild().getNodeValue());
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db=dbf.newDocumentBuilder();
Document d=db.parse("D:\\workspace\\threadL\\src\\com\\fanshe\\book.xml");
NodeList field =d.getElementsByTagName("field");
NodeList fieldList =d.getElementsByTagName("fieldlist");
NodeList layout =d.getElementsByTagName("layout");
//解析field
for(int i=0;i<field.getLength();i++)
{
Node node=field.item(i);
analyOneLayer(node);
}
//解析fieldlist
System.out.println("=========================fieldlist============================");
for(int j=0;j<fieldList.getLength();j++)
{
Node node=fieldList.item(j);
if(node.getNodeType()==Node.ELEMENT_NODE)
{
System.out.println("节点名称:"+node.getNodeName());
System.out.println("节点内容:"+node.getFirstChild().getNodeValue());
}
}
//解析layout
System.out.println("=========================layout============================");
for(int i=0;i<layout.getLength();i++)
{
Node node=layout.item(i);
if(node.getNodeType()==Node.ELEMENT_NODE)
{
System.out.println("节点名称:"+node.getNodeName());
System.out.println("节点内容:"+node.getFirstChild().getNodeValue());
}
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
接下来就是要将解析后的内容用代码转化为html页面,