目录
概念 :
XML即可扩展的标记语言,可以定义语义标记(标签),是元标记语言。XML不像超文本标记语言HTML,HTML只能使用规定的标记,对于XML,用户可以定义自己需要的标记。
XML文档以层级标签的形式来组织数据,多用于配置文件、存储静态数据、交换数据
一.Java配置文件中的三种配置位置及读取方式
1.同包
在同一个包中,我们可以直接通过加载器加载配置文件获取,并通过properties工具类去加载它的流对象
目录结构:
2.根目录
与同包不同的是要在文件名前要加/,获取到根目录,注:这里只能获取到java包下的根目录,也就是包中的Java Resource
目录结构:
package com.YU; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * 读取不同位置的配置文件 * 1.同包 * 2.根目录 * 3.安全路径WEB-INF * @author 21879 * */ public class Demo1 { public static void main(String[] args) throws Exception { // /** // * 同包: // * 通过类加载器加载配置文件 // */ // InputStream rs = Demo1.class.getResourceAsStream("db.properties"); // Properties p = new Properties(); // //让Properties工具类去加载获取文件的流对象 // p.load(rs); // System.out.println(p.getProperty("url")); /** * 根目录 */ InputStream rs = Demo1.class.getResourceAsStream("/db.properties"); Properties p = new Properties(); //让Properties工具类去加载获取文件的流对象 p.load(rs); System.out.println(p.getProperty("url")); } }
3. 安全目录WEB-INF
package com.YU; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/WebINFServlet") public class WebINFServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //访问Web-INF目录下的db.properties InputStream is = request.getServletContext().getResourceAsStream("WEB-INF/db.properties"); Properties p = new Properties(); p.load(is); System.out.println(p.getProperty("url")); } }
利用Servlet中的
InputStream is = request.getServletContext().getResourceAsStream("WEB-INF/db.properties");
         去获取WEB-INF中的文件,这里需要注意的是使用getResourceAsStream获取时要指定WEB-INF的路径
二.Java配置文件中的解析方式
1.常用解析方式
1.1selectNodes
获取到所有的节点标签
1.2selectSingleNode
匹配到第一个返回的节点标签
1.3getText
获取到节点标签中的文本内容
1.4attributeValue
获取到节点标签属性值
package com.YU; import java.io.InputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; /** * 获取xml内容之DOM4J解析 * 1.selectNodes * 2.selectSingleNode * 3.getText * 4.attributeValue * @author 21879 * */ public class Demo2 { public static void main(String[] args) throws Exception { //1.先获取到需要解析的配置文件 InputStream is = Demo2.class.getResourceAsStream("students.xml"); SAXReader sr = new SAXReader(); //读取流对象 Document doc = sr.read(is); //2.获取到所有student标签中的内容 List<Element> stuEle = doc.selectNodes("/students/student"); for (Element element : stuEle) { //获取到student下名字为name的 Element ele = (Element) element.selectSingleNode("name"); //3.获取标签里面的文本内容 System.out.println(ele.getText()); //4.获取标签的属性值(根据所遍历的student标签中获取) System.out.println(element.attributeValue("sid")); } } }
2.xpath解析
xpath解析需要搭配singlenode和getText使用
这里的xpath语法可以使用绝对定位,也可使用相对定位,下面的代码段都有展示
package com.YU; import java.io.InputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; /** * * @author 21879 * */ public class Demo3 { public static void main(String[] args) throws Exception { //1.先获取到需要解析的配置文件 InputStream is = Demo2.class.getResourceAsStream("students.xml"); SAXReader sr = new SAXReader(); //读取流对象 Document doc = sr.read(is); //利用xpath获取到name标签中的文本值 // Element element = (Element) doc.selectSingleNode("/students/student[@sid='s002']/name"); Element element = (Element) doc.selectSingleNode("//student[@sid='s002']/name"); System.out.println(element.getText()); } }




 
                            