使用xPath技术快速获取指定节点并对其修改--(xPath技术基础)

来源:互联网 发布:淘宝九宫格怎么做 编辑:程序博客网 时间:2024/06/05 00:35

xPath技术
    1、问题:当使用dom4j查询比较深的层次结构的节点、属性、标签、文本
    2、作用:用于快速获取所需的节点对象
    3、在dom4j中如何使用xPath技术
        1).导入xPath支持的jar包  jaxen-1.1-beta-6.jar
        2).使用xPath的方法
            List<Node> selectNodes("");查找多个节点对象
            Node selectSingleNode("xPath表达式");查找一个节点对象
    4、xPath的语法
                              取标签

        /              绝对路径  表示从XML的根位置开始或子元素
        //             相对路径  表示部分任何层次结构的选择结构
        *              通配符    表示匹配所有的元素
        [数字或函数]   条件      表示选择什么条件下的元素
        @              属性      表示选取属性节点
        and            关系      表示条件关系的与关系
        test()         文本      表示选择文本内容主程序:

xPath举例:

package gz.itcast.b_xpath;import java.io.File;import java.util.List;import org.dom4j.Document;import org.dom4j.Node;import org.dom4j.io.SAXReader;/** * 学习xPath表达式语法 * @author APPle * */public class Demo2 {public static void main(String[] args) throws Exception {Document doc = new SAXReader().read(new File("./src/contact.xml"));String xpath = "";/** * 1.  /      绝对路径      表示从xml的根位置开始或子元素(一个层次结构) */xpath = "/contactList";xpath = "/contactList/contact";/** * 2. //     相对路径       表示不分任何层次结构的选择元素。 */xpath = "//contact/name";xpath = "//name";/** * 3. *      通配符         表示匹配所有元素 */xpath = "/contactList/*"; //根标签contactList下的所有子标签xpath = "/contactList//*";//根标签contactList下的所有标签(不分层次结构)/** * 4. []      条件           表示选择什么条件下的元素 *///带有id属性的contact标签xpath = "//contact[@id]";//第二个的contact标签xpath = "//contact[2]";//选择最后一个contact标签xpath = "//contact[last()]";/** * 5. @     属性            表示选择属性节点 */xpath = "//@id"; //选择id属性节点对象,返回的是Attribute对象xpath = "//contact[not(@id)]";//选择不包含id属性的contact标签节点xpath = "//contact[@id='002']";//选择id属性值为002的contact标签xpath = "//contact[@id='001' and @name='eric']";//选择id属性值为001,且name属性为eric的contact标签/** *6.  text()   表示选择文本内容 *///选择name标签下的文本内容,返回Text对象xpath = "//name/text()";xpath = "//contact/name[text()='张三']";//选择姓名为张三的name标签List<Node> list = doc.selectNodes(xpath);for (Node node : list) {System.out.println(node);}}}


 

package gz.itcast.a_dom4j_read;import java.io.File;import java.io.FileOutputStream;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.Node;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;public class Demo_xPath {//使用xPath技术进行查询@Testpublic void test1() throws Exception {Document doc = new SAXReader().read(new File("f:/Student.xml"));String xPath = "//*";List<Node> list = doc.selectNodes(xPath);for(Node node : list) {System.out.println(node);}}public static void main(String[] args) throws Exception {/* * 需求:删除id值为2的学生标签 */Document doc = new SAXReader().read(new File("f:/Student.xml"));//1.查询id为2的学生标签//使用xPath技术Element stuElem = (Element)doc.selectSingleNode("//Student[@id=2]");//2.删除标签stuElem.detach();FileOutputStream out = new FileOutputStream("f:/Student.xml");OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8");XMLWriter writer = new XMLWriter(out,format);writer.write(doc);writer.close();}}


 

0 0