java获取xml配置文件|java如何读取XML配置文件

|

Ⅰ java如何读取XML配置文件

JAVA与XML文件,可以说是软件开发的“黄金搭档”,而如何使用JAVA完成对文件的读取,是我们首先要解决的问题。一、XML文件这个示例文件包括了用来打开ORACLE数据库的各种参数<?xml version="1.0" encoding="UTF-8"?><dbmsg> <dbinfo> <drivername>oracle.jdbc.driver.OracleDriver</drivername> <sConnStr>jdbc:oracle:thin:@11.88.225.80:1521:VOUCHERDB</sConnStr> <username>SYS AS SYSDBA</username> <password>voucherdb</password> </dbinfo></dbmsg>二、编写类名为ReadXml的类,用于解析XML文件我们要在应用程序中打开数据库,就必须完成对该文件中drivername、sConnStr、username、password的读取,通过查找有关资料,笔者编制了以下程序,用于读取文件名为filename的XML文件。package voucher.basic;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;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 ReadXml { private String drivername; private String sConnStr; private String username; private String password; public String getDrivername() { return drivername; }public String getSConnStr() { return sConnStr; }public String getUsername() { return username; }public String getPassword() { return password; } public void setDrivername(String drivername) { this.drivername = drivername; }public void setSConnStr(String connStr) { sConnStr = connStr; }public void setUsername(String username) { this.username = username; }public void setPassword(String password) { this.password = password; }public ReadXml(String fileName){ DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance(); try { DocumentBuilder dombuilder=domfac.newDocumentBuilder(); InputStream is=new FileInputStream(fileName); Document doc=dombuilder.parse(is); Element root=doc.getDocumentElement(); NodeList dbinfo=root.getChildNodes(); if(dbinfo!=null){ for(int i=0;i<dbinfo.getLength();i++){ Node db=dbinfo.item(i); for(Node node=db.getFirstChild();node!=null;node=node.getNextSibling()){ if(node.getNodeType()==Node.ELEMENT_NODE){ if(node.getNodeName().equals("drivername")){ setDrivername(node.getFirstChild().getNodeValue()); } if(node.getNodeName().equals("sConnStr")){ setSConnStr(node.getFirstChild().getNodeValue()); } if(node.getNodeName().equals("username")){ setUsername(node.getFirstChild().getNodeValue()); } if(node.getNodeName().equals("password")){ setPassword(node.getFirstChild().getNodeValue()); } } } } } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException 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(); } } }这个以ReadXml命名的类,使用了参数为文件名的构造方法,用户只要将配置文件我名称传递给该方法,就可以完成对XML文件的解析,进而完成对相应参数数的读取。三、如何获取XML文件全路径并读取配置参数获取XML文件全路径的方法有两个,一是在servlet中获取,二是在单独的JAVA类中获取。1.在servlet中获取XML文件的全路径并读取配置参数程序片段String dirPath = getServletContext().getRealPath( "/WEB-INF"); String fileName = dirPath + "/conn.xml"; ReadXml xm = new ReadXml(fileName); String DriverName = xm.getDrivername(); String connStr = xm.getSConnStr(); String user = xm.getUsername(); String pas = xm.getPassword();将这段程序添加到servlet中dopost()之后即可完成参数的读取2.在单独的JAVA类中获取全路径并读取配置参数程序片段String dirpath = System.getProperty("user.dir"); String xmlFile = dirpath + "/WebRoot/WEB-INF/conn.xml"; ReadXml rdxml = new ReadXml(xmlFile); String driverName = rdxml.getDrivername(); String sConnStr = rdxml.getSConnStr(); String userName = rdxml.getUsername(); String passWord = rdxml.getPassword();注:配置文件conn.xml保存在webroot/WEB-INF目录中。

Ⅱ java 读取和修改本地xml配置文件

你看一下这个吧.不需要导入特别的包,直接用API中的DOM方式解析,并保存的.——————————————————————————————————-import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.io.File;import java.util.HashMap;import java.util.Map;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;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.w3c.dom.Text;public class XmlApp extends JFrame implements ActionListener, ItemListener { private JTextField textField; private JComboBox comboBox; private Map<String, String> content = null; private Document doc; private String file = "H:\\content.xml"; public XmlApp() { getContentPane().setLayout(null); comboBox = new JComboBox(); comboBox.setBounds(110, 10, 112, 21); comboBox.addItemListener(this); getContentPane().add(comboBox); textField = new JTextField(); textField.setBounds(110, 41, 112, 21); getContentPane().add(textField); textField.setColumns(10); JButton btnSave = new JButton("Save"); btnSave.setBounds(252, 40, 93, 23); btnSave.addActionListener(this); getContentPane().add(btnSave); JLabel lblNode = new JLabel("Node"); lblNode.setBounds(10, 13, 90, 15); getContentPane().add(lblNode); JLabel lblValue = new JLabel("value"); lblValue.setBounds(10, 44, 90, 15); getContentPane().add(lblValue); init(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); setSize(400, 120); setLocationRelativeTo(null); setVisible(true); } public void init() { content = new HashMap<String, String>(); DocumentBuilderFactory factory; try { factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); doc = builder.parse(file); loopNodes(doc.getFirstChild(), "", false); textField.setText(content.get(comboBox.getSelectedItem())); } catch (Exception e) { System.out.println("e = " + e.getMessage()); } } public void loopNodes(Node node, String name, boolean isSave) { NodeList list = node.getChildNodes(); for (int i = 0; i < list.getLength(); i++) { Node tmp = list.item(i); if (tmp instanceof Element) { if (tmp.hasChildNodes()) { loopNodes(tmp, tmp.getNodeName(), isSave); } } if (tmp instanceof Text) { String value = tmp.getNodeValue(); if (value != null && !"".equals(value.trim())) { if (isSave) { tmp.setNodeValue(content.get(name)); } else { comboBox.addItem(name); content.put(name, value.trim()); } } } } } public static void main(String[] args) { new XmlApp(); } public void actionPerformed(ActionEvent e) { String value = textField.getText(); content.put((String) comboBox.getSelectedItem(), value); loopNodes(doc, "", true); try { TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File(file)); transformer.transform(source, result); } catch (Exception ex) { System.out.println(ex.getMessage()); } } public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { textField.setText(content.get(e.getItem())); } }}

Ⅲ java如何读取xml文件

public List<Student> doReadXML(String path) throws Exception { List<Student> empvoList = new ArrayList<Student>(); File file = new File(path); //输入流对象 FileInputStream fis = new FileInputStream(file); //jdom解析器 SAXBuilder sb = new SAXBuilder(); Document doc= sb.build(fis); //获得XML的根元素 Element root = doc.getRootElement(); //获得根元素下的所有子元素 List<Element> employees = root.getChildren(); for(int i=0;i<employees.size();i++){ Element employee =employees.get(i); Student stu= new Student(); String name = employee.getChildText("name"); String sex = employee.getChildText("sex"); String agetemp = employee.getChildText("age"); String home = employee.getChildText("home"); String email = employee.getChildText("email"); stu.setName(name); stu.setSex(sex); int age = 0; if(agetemp.equals("")){ age = 0; } else { age = Integer.parseInt(agetemp); } stu.setAge(age); stu.setHome(home); stu.setEmail(email); System.out.println(name+"\t"+i); empvoList.add(stu); } return empvoList; }

Ⅳ JAVA读取XML文件

import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;public class Xml { public static void main(String[] args) { try { DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new File("E:\\新建 文本文档 (3).xml")); Element rootElement = document.getDocumentElement(); NodeList list = rootElement.getElementsByTagName("Header"); Element element = (Element) list.item(0); System.out.println(element.getChildNodes().item(0).getNodeValue()); } catch (Exception e) { System.out.println("exception:" + e.getMessage()); } }}

Ⅳ Java如何读取XML文件 具体实现

xml的解析 1.解析式为了得到里面的内容,进行增,删,改查的操作 XML的解析方式 SAX(Simple API for XML)xml文档的一种简单的解析方式 DOM(Document Object Model) DOM4J SAX:基于事件的解析方式 DOM: 基于对象的解析方式 事件监听三要素 1.事件源 2.监听器 3.事件SAX 基于事件的解析 优点: 简单 效率高 缺点:顺序执行,不能得到某个元素 不能逆向执行 不能进行增,与删的操作SAX解析方式工作原理: 通过时间源xml文档创建SAXParseFactory SAXParserFactory factory=SAXParserFactory.newInstance(); 得到一个解析器 SAXParser parse=factory.newSAXParser(); 对xml文件进行解析 得到解析的文件对象 File file=new File("employees.xml"); 通过监听器进行解析 MyListener listener=new MyListener(); parse.parse(file,listener); 对于监听器有5个方法:监听器所在的类实现的接口有: org.xml.sax.hepers.DefaultHandler org.xml.sax 通过查看API文档中的DefaultHandler类中的下面5个方法 startDocument() 对于文档开始的解析 public void startDocument()throws SAXException{ System.out.println("文档开始解析啦!!!!"); } startElement()元素开始的解析其中几个名词 url:命名空间的url localName:命名空间的前缀 qName:元素 attributes:元素里的属性 public void startElement(String url,String localName,String qName,Attributes attributes)throws SAXException{ StringBuffer sb=new StringBuffer(); sb.append("<"+qName); for(int i=0;i<attributes.getLength();i++){ String attName=attributes.getQName(i);获得元素属性名称其中的i为元素的第几个属性 String attValue=attributes.getValue(i);获得元素属性的值其中的i为元素的第几个属性的值 sb.append(attName+"="+attValue); } sb.append(">"); System.out.print(sb.toString()); } character()获得元素的内容体 public void characters(char[]ch,int start,int length)throws SAXException{ System.out.print(new String(ch,start,length)); } endElement()获得元素的结束事件 public void endElement(String url,String localName,String qName)throws SAXException{ System.out.print("</"+qName+">"); } endDocument()获得文档的结束事件 public void endDocument(){ System.out.println("文档解析结束啦!!!!"); } 对于SAX解析只能逐行解析不能越行解析DOM:基于对象的 优点:灵活,能进行增删的操作 缺点:读取速度慢,效率低 占用的内容多对于DOM解析:不需要添加监听器,按级解析从根元素、一级子元素、二级子元素…… 同SAX解析相同刚开始也是要得到一个解析器; DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance() ; 因为构造方法不可用不可以new对象只能用newInstance()方法得到解析器对象 DocumentBuilder builder=factory.newDocumentBuilder() ;得到一个解析器 对于document可以有两种方法得到: Document document= builder.parse(new File(文件路径));通过parse方法解析一个已有的xml文档 Document document=builder.newDocument();可以得到一个空的document对象 得到根节点 Element root=document.getDocumentElement(); 如果不存在根节点即为一个空document对象的时候只能添加跟节点 Element root=document.createElement(根节点的名字) 得到根节点下面的所有一级子元素 NodeList list=root.getElementsByTagName(根节点的名字可以用root.getTagName或者root.getNodeName()得到根节点的名字)(); { 对与document可以添加一级子元素 不管document是否为空都可以添加 Element firstElements =root.creatElement(一级子元素的名字); 当然也可以为一级子元素添加属性 一级子元素的名字.setAttribute("属性名","属性值"); } 通过遍历list集合 for(int i=0;i<list.getLength();i++){ Element first_elements=(Element)list.item(i); 可以得到一级资源的属性的值当知道属性的时候 String attribute=first_elements.getAttribute("属性的名字"); 得到一级子元素的名字 String first_elements_name=first_elements.getNodeName(); 得到一级子元素下面所有的元素如id 第一个id元素当然也可有很多个id 通过item()来确定要取那个id Element id_element=(Element)first_elements.getElementByName("id").item(0); 得到id的值 String id_value=id_element.getFirstChild().getTextContent(); 通过这个遍历集合可以拿到所有子元素 }DOM添加或删除元素: DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance() ; 因为构造方法不可用不可以new对象只能用newInstance()方法得到解析器对象 DocumentBuilder builder=factory.newDocumentBuilder() ;得到一个解析器 对于document可以有两种方法得到: Document document= builder.parse(new File(文件路径));通过parse方法解析一个已有的xml文档 Document document=builder.newDocument();可以得到一个空的document对象 得到根节点 Element root=document.getDocumentElement(); 如果不存在根节点即为一个空document对象的时候只能添加跟节点 Element root=document.createElement(根节点的名字) 对与document可以添加一级子元素 不管document是否为空都可以添加 Element firstElements =root.creatElement(一级子元素的名字); 当然也可以为一级子元素添加属性 一级子元素的名字.setAttribute("属性名","属性值"); 添加二级子元素 Element secondElements=firstElements.creatElement("二级子元素的名字"); 挂载组装 一级子元素firstElements.append(secondElements); 根节点root.appendChild(firstElements); 将document对象树写入磁盘 TransformerFactory tf=TransformerFactory.newInstance(); Transformer former=tf.newTransformer(); DOMSource source=new DOMSource(document); StreamResult result= new StreamResult(new File("10.xml"));结果集 former.transform(source,result); 完毕DOM4j需要借助外部jar包 需要借助外部jar包就必须设置环境变量中的classpath把classpath设置成 dom4j jar包存在的路径(绝对路径) 例如: set classpath=.;C:\Documents and Settings\Administrator\桌面\day3\dom4j.jarimport org.dom4j.io.*;import java.io.*;import java.util.*;import org.dom4j.*;public static void read_XML(String fileName){ try{ //得到一个解析器,相当于SAX,DOM里面的解析器工厂,与解析器 SAXReader reader=new SAXReader(); //得到一个对象树 Document document=reader.read(new File(fileName)); //得到一个根元素 Element root=document.getRootElement(); System.out.println(root.getName()); //得到所有的一级子元素 List firstElements=root.elements(); Iterator it=firstElements.iterator(); while(it.hasNext()){ //依次得到每一个一级子元素 Element firstElement=(Element)it.next(); System.out.println(firstElement.getName()); //得到所有的属性 List attributes=firstElement.attributes(); for(Object obj:attributes){ //依次得到每一个属性 Attribute att=(Attribute)obj; System.out.println(att.getName()+"="+att.getValue()); } //得到一级子元素下面的所有元素,及其附带值 List second_Elements=firstElement.elements(); Iterator second_Element=second_Elements.iterator(); while(second_Element.hasNext()){ Element sec_Element=(Element)second_Element.next(); System.out.println(sec_Element.getName()+":"+sec_Element.getText()); } System.out.println("———-"); } }catch(Exception e){ }}public static void write(String fileName){ try{ Document document = DocumentHelper.createDocument(); //创造一级子元素 Element books=document.addElement("books"); books.addComment("The book is J2EE"); Element book=books.addElement("book"); 创建元素的属性 book.addAttribute("show","yes"); book.addAttribute("page","100"); 创建二级子元素 Element book_name=book.addElement("bookName"); 创建元素的内容体 book_name.setText("xml"); Element book_price=book.addElement("bookPrice"); book_price.setText("3000"); Element book_press=book.addElement("bookPress"); book_press.setText("etoak"); Element book_author=book.addElement("bookAuthor"); book_author.setText("Robin"); //挂载另一个一级子元素 book=books.addElement("book"); book.addAttribute("show","NO"); book.addAttribute("page","200"); book_name=book.addElement("bookName"); book_name.setText("葵花宝典"); book_price=book.addElement("bookPrice"); book_price.setText("无价之宝"); book_press.addElement("bookPress"); book_press.setText("华山派"); book_author=book.addElement("bookAuthor"); book_author.setText("林平之"); //创建xml文件输出的路径 OutputFormat format=OutputFormat.createPrettyPrint(); format.setEncoding("gbk"); XMLWriter xw=new XMLWriter(new FileOutputStream(fileName), format); //XMLWriter xx= new XMLWriter(System.out,OutputFormat.createPrettyPrint()); xw.write(document); xw.flush(); xw.close(); }catch(Exception e){ 对于DOM4j添加子元素,是一级一级的添加的而在DOM中是先创造 子元素然后再挂载的DOM4j在创建子元素的时候就确定好了顺序 对于文件的输出各有千秋各有特色其中SAX是需要添加监听器的 }}public static void update(String fileName){ try{ SAXReader reader= new SAXReader(); Document document = reader.read(new File(fileName)); Element root = document.getRootElement(); System.out.println(root.getName()); 在根节点上添加一级子元素 Element student=root.addElement("student"); Element id=student.addElement("id"); id.setText("007"); OutputStream os= new FileOutputStream(fileName); OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter xw = new XMLWriter(os,format); xw.write(document); xw.flush(); xw.close(); }catch(Exception e){ 和创建一个新的document对象类似只不过这个的根节点已经存在 直接可以在根节点上添加一级子元素; }}

Ⅵ Java读取xml配置文件:

你用DOM把账号节点取出来然后用String中的split方法做切割就可以放到数组里了如果单纯是想看账号是不是在这个里面你也可以直接String.indexof查找读出来的信息中有没有你要的账号

Ⅶ JAVA 读取XML文件

import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class XmlTester {public static void main(String[] args) throws DocumentException {// 使用了dom4j解析xml// 读取目录下用来测试的test.xml文件,取得xml主内容Document document = new SAXReader().read(“src/abc/test.xml”).getDocument();int i = 1;// 遍历文档根节点(wuxialist)下的子节点列表,即txtbook节点的集合for(Element txtbook : (List<Element>)document.getRootElement().elements()){//取得txtbook节点下的name节点的内容System.out.println(i+”.”+txtbook.element(“name”).getText());i++; //原来这里少些了这一行,先补上}}}

Ⅷ java如何读取xml文件

// 读取输入流 SAXReader reader = new SAXReader(); Document document = reader.read(inputStream); // 得到根元素 Element root = document.getRootElement(); // 得到根元素的所有子节点 List<Element> elementList = root.elements(); // 遍历所有子节点 for (Element e : elementList) map.put(e.getName(), e.getText()); // 释放资源 inputStream.close(); inputStream = null; 参考http://blog.csdn.net/lyq8479/article/details/8949088

Ⅸ java读取配置文件的方法(xml)

用的是jdom包URL url = RederXml.class.getClassLoader().getResource(""); String path = url.toString() + "/config.xml";\\工程种xml的路径 HashMap<String, String> map = new HashMap<String, String>(); SAXBuilder sax = new SAXBuilder(); Document doc = null; try { doc = sax.build(path); } catch (JDOMException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } Element root = doc.getRootElement();


赞 (0)