String xmlName = path + "/" + userName + ".xml";
// 定義需要返回的第一級(jí)菜單的名字集合
List firstNames = new ArrayList();
// Attribute的屬性集合
List attrs = new ArrayList();
// 聲明SAXReader
SAXReader saxReader = new SAXReader();
try {
Document doc = saxReader.read(xmlName);
// 獲得所有g(shù)rade=1的Element的text的值
String xpath = "/tree/item";
List list = doc.selectNodes(xpath);
Iterator it = list.iterator();
while (it.hasNext()) {
Element elt = (Element) it.next();
Attribute attr = elt.attribute("grade");
System.out.println(attr.getValue());
if (new Integer(attr.getValue()).intValue() == 1) {
attr = elt.attribute("text");
attrs.add(attr.getValue());
System.out.println(attr.getValue());
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
return attrs;
String xmlName = path + "/" + userName + ".xml";
// 定義需要返回的第一級(jí)菜單的名字集合
List firstNames = new ArrayList();
// Attribute的屬性集合
List attrs = new ArrayList();
// 聲明SAXReader
SAXReader saxReader = new SAXReader();
try {
Document doc = saxReader.read(xmlName);
// 獲得所有g(shù)rade=1的Element的text的值
String xpath = "/tree/item";
List list = doc.selectNodes(xpath);
Iterator it = list.iterator();
while (it.hasNext()) {
Element elt = (Element) it.next();
Attribute attr = elt.attribute("grade");
System.out.println(attr.getValue());
if (new Integer(attr.getValue()).intValue() == 1) {
attr = elt.attribute("text");
attrs.add(attr.getValue());
System.out.println(attr.getValue());
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
return attrs;
// 定義需要返回的第一級(jí)菜單的名字集合
List firstNames = new ArrayList();
// Attribute的屬性集合
List attrs = new ArrayList();
// 聲明SAXReader
SAXReader saxReader = new SAXReader();
try {
Document doc = saxReader.read(xmlName);
// 獲得所有g(shù)rade=1的Element的text的值
String xpath = "/tree/item";
List list = doc.selectNodes(xpath);
Iterator it = list.iterator();
while (it.hasNext()) {
Element elt = (Element) it.next();
Attribute attr = elt.attribute("grade");
System.out.println(attr.getValue());
if (new Integer(attr.getValue()).intValue() == 1) {
attr = elt.attribute("text");
attrs.add(attr.getValue());
System.out.println(attr.getValue());
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
return attrs;
String xmlName = path + "/" + userName + ".xml";
// 定義需要返回的第一級(jí)菜單的名字集合
List firstNames = new ArrayList();
// Attribute的屬性集合
List attrs = new ArrayList();
// 聲明SAXReader
SAXReader saxReader = new SAXReader();
try {
Document doc = saxReader.read(xmlName);
// 獲得所有g(shù)rade=1的Element的text的值
String xpath = "/tree/item";
List list = doc.selectNodes(xpath);
Iterator it = list.iterator();
while (it.hasNext()) {
Element elt = (Element) it.next();
Attribute attr = elt.attribute("grade");
System.out.println(attr.getValue());
if (new Integer(attr.getValue()).intValue() == 1) {
attr = elt.attribute("text");
attrs.add(attr.getValue());
System.out.println(attr.getValue());
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
return attrs;
還有一個(gè)是獲取某個(gè)節(jié)點(diǎn)下面里的所有第一級(jí)子節(jié)點(diǎn),而不是所有的節(jié)點(diǎn)(包括子節(jié)點(diǎn)和孫節(jié)點(diǎn)).
public static List getSecondMenuNames(String textName, String path,
String userName) {
String xmlName = path + "/" + userName + ".xml";
String name = textName;
// 定義需要返回的第二級(jí)菜單的名字集合
List firstNames = new ArrayList();
// Attribute的屬性集合
List attrs = new ArrayList();
// 聲明SAXReader
SAXReader saxReader = new SAXReader();
try {
Document doc = saxReader.read(xmlName);
// 這個(gè)xpath的意思是,獲取text='系統(tǒng)管理'的一個(gè)Item下的所有Item的節(jié)點(diǎn)
String xpath = "//item[@text='" + name + "']/child::*";
List list = doc.selectNodes(xpath);
Iterator it = list.iterator();
while (it.hasNext()) {
Element elt = (Element) it.next();
Attribute attr = elt.attribute("grade");
System.out.println(attr.getValue());
attr = elt.attribute("text");
System.out.println(attr.getValue());
attrs.add(attr.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
return attrs;
}
public static List getSecondMenuNames(String textName, String path,
String userName) {
String xmlName = path + "/" + userName + ".xml";
String name = textName;
// 定義需要返回的第二級(jí)菜單的名字集合
List firstNames = new ArrayList();
// Attribute的屬性集合
List attrs = new ArrayList();
// 聲明SAXReader
SAXReader saxReader = new SAXReader();
try {
Document doc = saxReader.read(xmlName);
// 這個(gè)xpath的意思是,獲取text='系統(tǒng)管理'的一個(gè)Item下的所有Item的節(jié)點(diǎn)
String xpath = "//item[@text='" + name + "']/child::*";
List list = doc.selectNodes(xpath);
Iterator it = list.iterator();
while (it.hasNext()) {
Element elt = (Element) it.next();
Attribute attr = elt.attribute("grade");
System.out.println(attr.getValue());
attr = elt.attribute("text");
System.out.println(attr.getValue());
attrs.add(attr.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
return attrs;
}
String userName) {
String xmlName = path + "/" + userName + ".xml";
String name = textName;
// 定義需要返回的第二級(jí)菜單的名字集合
List firstNames = new ArrayList();
// Attribute的屬性集合
List attrs = new ArrayList();
// 聲明SAXReader
SAXReader saxReader = new SAXReader();
try {
Document doc = saxReader.read(xmlName);
// 這個(gè)xpath的意思是,獲取text='系統(tǒng)管理'的一個(gè)Item下的所有Item的節(jié)點(diǎn)
String xpath = "//item[@text='" + name + "']/child::*";
List list = doc.selectNodes(xpath);
Iterator it = list.iterator();
while (it.hasNext()) {
Element elt = (Element) it.next();
Attribute attr = elt.attribute("grade");
System.out.println(attr.getValue());
attr = elt.attribute("text");
System.out.println(attr.getValue());
attrs.add(attr.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
return attrs;
}
public static List getSecondMenuNames(String textName, String path,
String userName) {
String xmlName = path + "/" + userName + ".xml";
String name = textName;
// 定義需要返回的第二級(jí)菜單的名字集合
List firstNames = new ArrayList();
// Attribute的屬性集合
List attrs = new ArrayList();
// 聲明SAXReader
SAXReader saxReader = new SAXReader();
try {
Document doc = saxReader.read(xmlName);
// 這個(gè)xpath的意思是,獲取text='系統(tǒng)管理'的一個(gè)Item下的所有Item的節(jié)點(diǎn)
String xpath = "//item[@text='" + name + "']/child::*";
List list = doc.selectNodes(xpath);
Iterator it = list.iterator();
while (it.hasNext()) {
Element elt = (Element) it.next();
Attribute attr = elt.attribute("grade");
System.out.println(attr.getValue());
attr = elt.attribute("text");
System.out.println(attr.getValue());
attrs.add(attr.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
return attrs;
}
注意看其中的xpath的寫法,正是因?yàn)橛辛藊path,我們才能如此簡(jiǎn)單靈活的對(duì)xml進(jìn)行操作.
剛剛使用xpath的時(shí)候可能會(huì)報(bào)一個(gè)錯(cuò)誤:Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
這時(shí)我們應(yīng)該往CLASSPATH導(dǎo)入一個(gè)jar包,叫jaxen-1.1.1.jar,可從網(wǎng)上下載.
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
表達(dá)式 描述
節(jié)點(diǎn)名 選擇所有該名稱的節(jié)點(diǎn)集
/ 選擇根節(jié)點(diǎn)
// 選擇當(dāng)前節(jié)點(diǎn)下的所有節(jié)點(diǎn)
. 選擇當(dāng)前節(jié)點(diǎn)
.. 選擇父節(jié)點(diǎn)
@ 選擇屬性
示例
表達(dá)式 描述
bookstore 選擇所有bookstore子節(jié)點(diǎn)
/bookstore 選擇根節(jié)點(diǎn)bookstore
bookstore/book 在bookstore的子節(jié)點(diǎn)中選擇所有名為book的節(jié)點(diǎn)
//book 選擇xml文檔中所有名為book的節(jié)點(diǎn)
bookstore//book 選擇節(jié)點(diǎn)bookstore下的所有名為book為節(jié)點(diǎn)
//@lang 選擇所有名為lang的屬性
表達(dá)式 描述
/bookstore/book[1] 選擇根元素bookstore的book子元素中的第一個(gè)(注意: IE5以上瀏覽器中第一個(gè)元素是0)
/bookstore/book[last()] 選擇根元素bookstore的book子元素中的最后一個(gè)
/bookstore/book[last()-1] 選擇根元素bookstore的book子元素中的最后第二個(gè)
/bookstore/book[position()35.00] 選擇根元素bookstore的book子元素中那些擁有price子元素且值大于35的
/bookstore/book[price>35.00]/title 選擇根元素bookstore的book子元素中那些擁有price子元素且值大于35的title子元素
通配符 描述
* 匹配所有元素
@* 匹配所有屬性節(jié)點(diǎn)
node() 匹配任何類型的節(jié)點(diǎn)
示例
表達(dá)式 描述
/bookstore/* 選擇根元素bookstore的下的所有子元素
//* 選擇文檔中所有元素
//title[@*] 選擇所有擁有屬性的title元素