insert into login(username,password) values('aaa','123')
update login set username='bbb',password='444' where id=1
delete from login where id=4
解析xml文件,我一看代码长就糊涂,以前看过好几遍就是记不住,自己写不出来,其实有什么啊 关键就那么四五句话,我今天把这个背过背牢,以后再也不能忘了,真是天天吃稀饭的命!!
SAXReader reader = new SAXReader(); //初始化一个SAXReader 对象
Document document = (Document) reader.read(new File(xmlFileName));
//通过指定文件路径 读取文件,生成一个 Document对象
Element element = document.getRootElement();//文档对象要获取根元素啊亲
Iterator it = element.elementIterator("table");//开始迭代了
下面就是不停的找元素啊,找属性啊,找文本值啊
element = (Element) it.next(); //迭代出元素了
String oper = element.attributeValue("operation"); //获得属性值了
columnValue2 = element.getText(); //获得文本了
想想 文档结构模型,一步一步来的,其他解析方式不也大同小异吗,学好一个,比都蜻蜓点水强,长点心。。。
<?xml version="1.0" encoding="UTF-8"?>
<generator>
<table name="login" operation="1">
<column name="username" handle="0">aaa</column>
<column name="password" handle="0">123</column>
</table>
------------------------------------------------------
Element element = document.getRootElement();//文档对象要获取根元素啊亲,这个根元素就是
generator,通过根元素迭代子元素
Iterator it = element.elementIterator("table");//开始迭代了
另外上面的程序只是处理元素不是很分散,如果元素类别较为分散,只掌握以上的几个方法是不够的,比如以下 xml文件
<?xml version= "1.0" encoding= "GBK"?>
<doc>
<person id= "1" sex= "m">
<name>zhangsan</name>
<age>32</age>
<adds>
<add code= "home">home add</add>
<add code= "com">com add</add>
</adds>
</person>
<person id= "2" sex= "w">
<name>lisi</name>
<age>22</age>
<adds>
<add ID= "22" id= "23" code= "home">home add</add>
<add ID= "23" id= "22" code= "com">com add</add>
<add id= "24" code= "com">com add</add>
</adds>
</person>
</doc>
person的子元素,类别较为分散,用下面的方法:
String name = e_pe.element("name").getText();//直接通过.element() 方法就可以根据 子元素的名字,找到子元素,只有在有两个以上的子元素相同时,进行迭代 比如<add >元素
String age = e_pe.element("age").getText();
String add = e_add.getTextTrim();//这个可以去掉空格
里面的方法有很多,用起来非常灵活,当然必须先了解,才能游刃有余,手中无刀,心中有刀,有空多学点吧。。
另外:加入
jaxen-1.1-beta-6.jar 可以用 XPath 对XML文件进行操作,试想以前的操作必须遍历整个xml文档,如果xml文档较多,而我们要从xml中取的信息又相对较少时,上面那个方法太坑爹了, 用XPath可以方便的对xml文档中任意位置的数据进行拿出来,方便何止一千倍啊啊。。
方法:
System.out.println( "---------通过XPath获取一个元素----------");
Node node1 = document.selectSingleNode( "/doc/person");
System.out.println( "输出节点:" + "\t" + node1.asXML());
Node node2 = document.selectSingleNode( "/doc/person/@sex");
System.out.println( "输出节点:" + "\t" + node2.asXML());
Node node3 = document
.selectSingleNode( "/doc/person[name=\"zhangsan\"]/age");
System.out.println( "输出节点:" + "\t" + node3.asXML());
System.out.println( "\n---------XPath获取List节点测试------------");
List list = document
.selectNodes( "/doc/person[name=\"zhangsan\"]/adds/add");
for (Iterator it = list.iterator(); it.hasNext();) {
Node nodex = (Node) it.next();
System.out.println(nodex.asXML());
}
System.out.println( "\n---------通过ID获取元素的测试----------");
System.out.println( "陷阱:通过ID获取,元素ID属性名必须为“大写ID”,小写的“id”会认为是普通属性!");
String id22 = document.elementByID( "22").asXML();
String id23 = document.elementByID( "23").asXML();
String id24 = null;
if (document.elementByID( "24") != null) {
id24 = document.elementByID( "24").asXML();
} else {
id24 = "null";
}
可以取得单个节点:
document.selectSingleNode(),括号里面是判断条件,通过条件的灵活变化,可以取得任意想得到的节点,确实很强大,所以有必要学学,条件的编写:
document
.
selectSingleNode() 取得节点,如果两个则取第一个
document
.
electNodes() 取得节点集合
document.elementByID() 通过ID取得,根据xml中的ID取,id则为属性
node.
asXML() 输出内容
输出的都是xml格式的,要取得数据,还不清楚怎么操作
/doc/person -->取得person节点,
/doc/person/@sex -->取得属性,属性加@符号
/doc/person[name=\"zhangsan\"]/age -->取得节点 []内是判断吧,符合条件的
/doc/person[name=\"zhangsan\"]/adds/add--->取得集合
看结果吧:
---------通过XPath获取一个元素----------
输出节点: <person id="1" sex="m">
<name>zhangsan</name>
<age>32</age>
<adds>
<add code="home">home add</add>
<add code="com">com add</add>
</adds>
</person>
输出节点: sex="m"
输出节点: <age>32</age>
---------XPath获取List节点测试------------
<add code="home">home add</add>
<add code="com">com add</add>
---------通过ID获取元素的测试----------
陷阱:通过ID获取,元素ID属性名必须为“大写ID”,小写的“id”会认为是普通属性!
id22= <add ID="22" id="23" code="home">home add</add>
id23= <add ID="23" id="22" code="com">com add</add>