📄 databasecenter.java
字号:
package function;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class DataBaseCenter {
private Document doc=null;
String filename=null;
public DataBaseCenter(String m_filename){
filename=m_filename;
Init();
}
public void Init(){
if(filename==null)
return;
File file=new File(filename);
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=null;
//初始化builder
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//找到file对应的xml数据文件
try {
doc=builder.parse(file);
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private boolean IsAnte(String[] rule1,String[] rule2) {
int length1=rule1.length;
int length2=rule2.length;
if(length1<2||length2<2){
return false;
}
for(int i=0;i<length2-1;i++){
if(rule1[length1-1].equals(rule2[i])){
return true;
}
}
return false;
}
public synchronized void AddRule(String [] rule){
if(doc==null)
return ;
if(ContainsRule(rule))
return ;
//获取根元素
Element rootElement=doc.getDocumentElement();
boolean stop=false;
//读取规则
NodeList children=rootElement.getChildNodes();
for(int i=0;i<children.getLength();i++){
Node childNode=children.item(i);
if(childNode instanceof Element){
Element childElement=(Element)(childNode);
NodeList _children=childElement.getElementsByTagName("tuple");
//条件的总长度
int num_of_condition=_children.getLength();
String[] rule2=new String[num_of_condition];
for(int j=0;j<num_of_condition;j++){
Node node=_children.item(j);
Element nodeElement=(Element)(node);
rule2[j]=nodeElement.getElementsByTagName("val").item(0).getTextContent();
}
if(IsAnte(rule, rule2)){//插入中间
int number=rule.length;
Element Rule=doc.createElement("rule");
for(int k=0;k<number;k++){
Element ruleElement=doc.createElement("tuple");
Element node1=doc.createElement("object");
node1.setTextContent("动物");
ruleElement.appendChild(node1);
Element node2=doc.createElement("var");
node2.setTextContent("特征");
ruleElement.appendChild(node2);
Element node3 = doc.createElement("val");;
node3.setTextContent(rule[k]);
ruleElement.appendChild(node3);
Rule.appendChild(ruleElement);
}
rootElement.insertBefore(Rule, childElement);
stop=true;
break;
}
}
}
if (!stop) {//插入尾部
int number = rule.length;
Element Rule = doc.createElement("rule");
for (int i = 0; i < number; i++) {
Element ruleElement = doc.createElement("tuple");
Element node1 = doc.createElement("object");
node1.setTextContent("动物");
ruleElement.appendChild(node1);
Element node2 = doc.createElement("var");
node2.setTextContent("特征");
ruleElement.appendChild(node2);
Element node3 = doc.createElement("val");
node3.setTextContent(rule[i]);
ruleElement.appendChild(node3);
Rule.appendChild(ruleElement);
}
rootElement.appendChild(Rule);
}
//进行修改
try {
TransformerFactory tFactory=TransformerFactory.newInstance();
Transformer transformer=tFactory.newTransformer();
DOMSource source=new DOMSource(doc);
StreamResult streamResult=new StreamResult(new File(filename));
transformer.transform(source, streamResult);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("ok");
}
private boolean ContainsRule(String []rule) {
if(rule==null||rule.length<2){
return false;
}
StringBuffer sBuffer=new StringBuffer();
int j=rule.length;
for(int i=0;i<j;i++){
sBuffer.append(rule[i]);
if(i!=j-1){
sBuffer.append(" ");
}
}
ArrayList<String> all=GetAllRules();
if(all==null){
return false;
}
return all.contains(sBuffer.toString());
}
public synchronized ArrayList<String> GetAllRules(){
if(doc==null)
return null;
ArrayList<String> result=null;
//获取根元素
Element rootElement=doc.getDocumentElement();
//读取规则
NodeList children=rootElement.getChildNodes();
for(int i=0;i<children.getLength();i++){
Node childNode=children.item(i);
if(childNode instanceof Element){
StringBuffer sBuffer=new StringBuffer();
Element childElement=(Element)(childNode);
NodeList _children=childElement.getElementsByTagName("tuple");
//条件的总长度
int num_of_condition=_children.getLength();
for(int j=0;j<num_of_condition;j++){
Node node=_children.item(j);
Element nodeElement=(Element)(node);
String temp=nodeElement.getElementsByTagName("val").item(0).getTextContent();
sBuffer.append(temp);
if(j!=num_of_condition-1){
sBuffer.append(" ");
}
}
if(result==null){
result=new ArrayList<String>();
}
result.add(sBuffer.toString());
}
}
return result;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -