XML文件如下:
Menus.xml
<?xml version="1.0" encoding="utf-8" ?>
<Menus>
<MyMenu code="10000" name="我的桌面" right="false">
<ToolBar code="10100" name="首页" url="Index" />
<ToolBar code="10200" name="个人考勤" url="KaoQin">
<LeftMenu code="10201" name="每日考勤" url="Today" />
<LeftMenu code="10202" name="请假申请" url="Today" />
</ToolBar>
</MyMenu>
<MyMenu code="20000" name="人力资源" right="true">
<ToolBar code="20100" name="首页" url="" right="false" />
<ToolBar code="20200" name="人事管理" url="Employee" right="true">
<LeftMenu code="20201" name="员工管理" url="Employee" right="true"></LeftMenu>
<LeftMenu code="20202" name="部门管理" url="Department" right="true"></LeftMenu>
<LeftMenu code="20203" name="职位管理" url="Position" right="true"></LeftMenu>
<LeftMenu code="20204" name="角色管理" url="Role" right="true"></LeftMenu>
</ToolBar>
</MyMenu>
</Menus>想用java实现读取此XML,并把相应的值付给对象。
MyMenu.java
public class MyMenu {
public int code;
public String name;
public boolean right;
public List<ToolBar> children; //getter 和setter方法略……
}ToolBar.java
public class ToolBar {
public int code;
public String name;
public String url;
public boolean right;
public List<LeftMenu> children; //getter 和setter方法略……
}
LeftMenu.java
public class LeftMenu {
public int code;
public String name;
public String url;
public boolean right;
//getter 和setter方法略……
}以前从来没有做过解析XML,今天从网上找了好多代码调试,发现都不太适用。望高人指点……谢谢了!
Menus.xml
<?xml version="1.0" encoding="utf-8" ?>
<Menus>
<MyMenu code="10000" name="我的桌面" right="false">
<ToolBar code="10100" name="首页" url="Index" />
<ToolBar code="10200" name="个人考勤" url="KaoQin">
<LeftMenu code="10201" name="每日考勤" url="Today" />
<LeftMenu code="10202" name="请假申请" url="Today" />
</ToolBar>
</MyMenu>
<MyMenu code="20000" name="人力资源" right="true">
<ToolBar code="20100" name="首页" url="" right="false" />
<ToolBar code="20200" name="人事管理" url="Employee" right="true">
<LeftMenu code="20201" name="员工管理" url="Employee" right="true"></LeftMenu>
<LeftMenu code="20202" name="部门管理" url="Department" right="true"></LeftMenu>
<LeftMenu code="20203" name="职位管理" url="Position" right="true"></LeftMenu>
<LeftMenu code="20204" name="角色管理" url="Role" right="true"></LeftMenu>
</ToolBar>
</MyMenu>
</Menus>想用java实现读取此XML,并把相应的值付给对象。
MyMenu.java
public class MyMenu {
public int code;
public String name;
public boolean right;
public List<ToolBar> children; //getter 和setter方法略……
}ToolBar.java
public class ToolBar {
public int code;
public String name;
public String url;
public boolean right;
public List<LeftMenu> children; //getter 和setter方法略……
}
LeftMenu.java
public class LeftMenu {
public int code;
public String name;
public String url;
public boolean right;
//getter 和setter方法略……
}以前从来没有做过解析XML,今天从网上找了好多代码调试,发现都不太适用。望高人指点……谢谢了!
http://www.it.com.cn/f/edu/053/27/93819.htm
这里的xml都是取节点的属性值,然后放到对象里即可。主要还是看你用什么解析器,不同的解析器提供的方法都是不一样的。
<MyMenu code="10000" name="我的桌面" right="false">
我用SAX方法,从API里找了好多方法都没找到怎么读取MyMenu里的code,name等等属性值的方法,可能是做法不对!public static List<MyMenu> AllMenu() throws ParserConfigurationException,
SAXException, IOException {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
/*
* builder.parse()方法将给定文件的内容解析为一个 XML 文档, 并且返回一个新的 DOM Document对象。
*/
Document document = builder.parse(new File("WebRoot\\Menus.xml"));
// 获取文档的根元素,赋值给rootElement变量
Element rootElement = document.getDocumentElement();
NodeList childNodes = rootElement.getChildNodes();
MyMenu myMenu = new MyMenu();
for (int i = 0; i < childNodes.getLength(); i++) {
// 获取childNodes的第i个节点
Node childNode = childNodes.item(i);
// 判断childNode是不是一个元素节点,并且它的 nodeName 值为book
if (childNode.getNodeType() == Node.ELEMENT_NODE
&& childNode.getNodeName().equals("MyMenu")) {
myMenu.setCode(这里试了好多childNode.XXX方法都不行……);
应该写哪个方法才能获取code属性呢???
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;//使用了jdom-1.0.jar
public class ReadMyMenu
{
public static void main(String[] args) throws JDOMException, IOException
{
String filename = "mymenu.xml";
String rootPath = "//Menus/MyMenu"; List<MyMenu> mymenus = new ArrayList<MyMenu>();
List<ToolBar> toolBars = null;
List<LeftMenu> leftMenus = null; URL url = ReadMyMenu.class.getClassLoader().getResource(filename);
File file = new File(url.getPath()); XPath xpath = null;
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(file); xpath = XPath.newInstance(rootPath);
List<Element> elementsMenu = xpath.selectNodes(document); MyMenu menu = null;
ToolBar bar = null;
LeftMenu left = null; for (Element ele : elementsMenu)
{
menu = new MyMenu();
menu.setCode(Integer.valueOf(ele.getAttributeValue("code")));
menu.setName(ele.getAttributeValue("name"));
menu.setRight(Boolean.valueOf(ele.getAttributeValue("right"))); List<Element> elementsBars = ele.getChildren("ToolBar");
toolBars = new ArrayList<ToolBar>();
for (Element eleBar : elementsBars)
{
bar = new ToolBar();
bar.setCode(Integer.valueOf(eleBar.getAttributeValue("code")));
bar.setName(eleBar.getAttributeValue("name"));
bar.setUrl(eleBar.getAttributeValue("url"));
bar
.setRight(Boolean.valueOf(eleBar
.getAttributeValue("right")));
List<Element> elementsLeft = eleBar.getChildren("LeftMenu");
leftMenus = new ArrayList<LeftMenu>();
for (Element eleLeft : elementsLeft)
{
left = new LeftMenu();
left.setCode(Integer.valueOf(eleLeft
.getAttributeValue("code")));
left.setName(eleLeft.getAttributeValue("name"));
left.setRight(Boolean.valueOf(eleLeft
.getAttributeValue("right")));
left.setUrl(eleLeft.getAttributeValue("url"));
leftMenus.add(left);
}
bar.setChildren(leftMenus);
toolBars.add(bar);
}
menu.setChildren(toolBars);
mymenus.add(menu);
}
}
}
哪位大师帮偶看一下,谢谢import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class ParseMenu {
public static void main(String[] args) throws Exception {
//建立DOM对象
InputSource is=null;
DocumentBuilderFactory dbf=null;
DocumentBuilder db=null;
Document doc=null;
try {
is=new InputSource(new StringReader(readFromFile("Menus.xml")));
dbf=DocumentBuilderFactory.newInstance();
db=dbf.newDocumentBuilder();
doc=db.parse(is);
} catch (ParserConfigurationException pce) {
throw pce;
}catch(SAXException se){
throw se;
}catch(IOException ioe){
throw ioe;
}
NodeList nodeList=null;
NamedNodeMap namedNodeMap=null;
String codeValue=null,nameValue=null,urlValue=null,rightValue=null;
//MyMenu
nodeList=doc.getElementsByTagName("MyMenu");
List<MyMenu> myMenus=new ArrayList<MyMenu>();
MyMenu myMenu=null;
List<ToolBar> toolBarChildren=null;
List<LeftMenu> leftMenuChildren=null;
ToolBar toolBar=null;
LeftMenu leftMenu=null;
for (int i = 0; i < nodeList.getLength(); i++) {
myMenu=new MyMenu();
namedNodeMap=nodeList.item(i).getAttributes();
codeValue=namedNodeMap.getNamedItem("code").getNodeValue();
nameValue=namedNodeMap.getNamedItem("name").getNodeValue();
if(namedNodeMap.getNamedItem("right")!=null) rightValue=namedNodeMap.getNamedItem("right").getNodeValue();
myMenu.setCode(Integer.parseInt(codeValue));
myMenu.setName(nameValue);
if(rightValue!=null){
if(rightValue.equals("true")) myMenu.setRight(true);
else myMenu.setRight(false);
}
//判读ToolBar是否有子节点
if(nodeList.item(i).hasChildNodes()){
//ToolBar
toolBarChildren=new ArrayList<ToolBar>();
nodeList=doc.getElementsByTagName("ToolBar");
for (int j = 0; j < nodeList.getLength(); j++) {
toolBar=new ToolBar();
namedNodeMap=nodeList.item(j).getAttributes();
codeValue=namedNodeMap.getNamedItem("code").getNodeValue();
nameValue=namedNodeMap.getNamedItem("name").getNodeValue();
urlValue=namedNodeMap.getNamedItem("url").getNodeValue();
if(namedNodeMap.getNamedItem("right")!=null) rightValue=namedNodeMap.getNamedItem("right").getNodeValue();
toolBar.setCode(Integer.parseInt(codeValue));
toolBar.setName(nameValue);
toolBar.setUrl(urlValue);
if(rightValue!=null){
if(rightValue.equals("true")) toolBar.setRight(true);
else toolBar.setRight(false);
}
//判读ToolBar是否有子节点
if(nodeList.item(j).hasChildNodes()){
//LeftMenu
nodeList=doc.getElementsByTagName("LeftMenu");
leftMenuChildren=new ArrayList<LeftMenu>();
for (int k = 0; k < nodeList.getLength(); k++) {
leftMenu=new LeftMenu();
namedNodeMap=nodeList.item(k).getAttributes();
codeValue=namedNodeMap.getNamedItem("code").getNodeValue();
nameValue=namedNodeMap.getNamedItem("name").getNodeValue();
urlValue=namedNodeMap.getNamedItem("url").getNodeValue();
if(namedNodeMap.getNamedItem("right")!=null) rightValue=namedNodeMap.getNamedItem("right").getNodeValue();
leftMenu.setCode(Integer.parseInt(codeValue));
leftMenu.setName(nameValue);
leftMenu.setUrl(urlValue);
if(rightValue!=null){
if(rightValue.equals("true")) leftMenu.setRight(true);
else leftMenu.setRight(false);
}
leftMenuChildren.add(leftMenu);
}
toolBar.setChildren(leftMenuChildren);
}
toolBarChildren.add(toolBar);
}
myMenu.setChildren(toolBarChildren);
}
myMenus.add(myMenu);
}
for (MyMenu myMenu2 : myMenus) {
System.out.println(myMenu2.getCode()+" "+myMenu2.getName()+" "+myMenu2.getRight());
if(myMenu2.getChildren()!=null){
for (ToolBar toolBar2 : myMenu2.getChildren()) {
System.out.println(" "+toolBar2.getCode()+" "+toolBar2.getName()+" "+toolBar2.getUrl()+" "+toolBar.getRight());
if(toolBar2.getChildren()!=null){
for (LeftMenu leftMenu2 : toolBar2.getChildren()) {
System.out.println(" "+leftMenu2.getCode()+" "+leftMenu2.getName()+" "+leftMenu2.getUrl()+" "+leftMenu2.getRight());
}
}
}
}
}
}
private static String readFromFile(String fileName) throws Exception{
//可变字符串
StringBuffer sb=new StringBuffer(1024);
try{
File file=new File(fileName);
FileReader fr=new FileReader(file);
BufferedReader br=new BufferedReader(fr);
String str=br.readLine();
while(str!=null){
sb.append(str+"\r\n");
str=br.readLine();
}
}catch(Exception ex){
ex.printStackTrace();
throw ex;
}
return sb.toString();
}
}
lz请注意元素取值为空的情况.我没有进行判空操作
然后getPath()的时候我的路径中有空格,它会解析成什么“%20“之类的东西……这个怎么解决好啊?不会是要写个方法,判断是否有那个符号,有的话转换成空格吧……???
URL url = ReadMyMenu.class.getClassLoader().getResource(filename);
File file = new File(url.getPath());