您的位置:首页 > 其它

XPath的使用

2015-10-11 14:32 351 查看
前面介绍了Jsoup,现在记录一下XPath

XPath主要是NodeSet和Node,NodeSet是节点的集合,Node是一个节点。其他的是一样的操作。

XPath的操作:

package SWPU;

import java.io.File;
import java.io.FileInputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XPathDemo {
private static Document doc;
private static XPath xpath;

public static void main(String[] args) throws Exception {
init();
getRootEle();
getChildEles();
getPartEles();
haveChildsEles();
getLevelEles();
getAttrEles();

//打印根节点下的所有元素节点
System.out.println(doc.getDocumentElement().getChildNodes().getLength());
NodeList nodeList = doc.getDocumentElement().getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
if (nodeList.item(i).getNodeType() == Node.ELEMENT_NODE) {
System.out.print(nodeList.item(i).getNodeName() + " ");
}
}
}

// 初始化Document、XPath对象
public static void init() throws Exception {
// 创建Document对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(new FileInputStream(new File("F://demo.xml")));

// 创建XPath对象
XPathFactory factory = XPathFactory.newInstance();
xpath = factory.newXPath();
}

// 获取根元素
// 表达式可以更换为/*,/rss
public static void getRootEle() throws XPathExpressionException {
Node node = (Node) xpath.evaluate("/rss", doc, XPathConstants.NODE);  //提取出相应的路径中的内容,NODE是指一个
System.out.println(node.getNodeName() + "--------"  //getNodeName()获取节点名称
+ node.getNodeValue()); //getNodeValue()获取节点的值
}

// 获取子元素并打印
public static void getChildEles() throws XPathExpressionException {
NodeList nodeList = (NodeList) xpath.evaluate("/rss/channel/*", doc,  //获取的是整个元素
XPathConstants.NODESET);     //返回的是节点列表 ,NODESET是节点列表
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.print(nodeList.item(i).getNodeName() + ":"+nodeList.item(i).getTextContent()+"\n");//通过item()来获得每一个列表项
}
System.out.println();
}

// 获取部分元素
// 只获取元素名称为title的元素
public static void getPartEles() throws XPathExpressionException {
NodeList nodeList = (NodeList) xpath.evaluate("//*[name() = 'title']",
doc, XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.print(nodeList.item(i).getNodeName() + "-->"
+ nodeList.item(i).getTextContent());
}
System.out.println();
}

// 获取包含子节点的元素
public static void haveChildsEles() throws XPathExpressionException {
NodeList nodeList = (NodeList) xpath.evaluate("//*[*]", doc,
XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.print(nodeList.item(i).getNodeName() + " ");
}
System.out.println();
}

// 获取指定层级的元素
public static void getLevelEles() throws XPathExpressionException {
NodeList nodeList = (NodeList) xpath.evaluate("/*/*/*/*", doc,  //四层路径下面匹配
XPathConstants.NODESET);
System.out.println("LEVEL:\n");
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.print(nodeList.item(i).getNodeName() + "-->"
+ nodeList.item(i).getTextContent() + "\n ");
}
System.out.println("-----------------------------");
}

// 获取指定属性的元素
// 获取所有大于指定价格的书箱
public static void getAttrEles() throws XPathExpressionException {
NodeList nodeList = (NodeList) xpath.evaluate("//bookstore/book[price>35.00]/title", doc,
XPathConstants.NODESET);                        //上面找的是title元素,price〉35.00作为查询条件
System.out.println("Attibute:\n");
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.print(nodeList.item(i).getNodeName() + "-->"
+ nodeList.item(i).getTextContent() + " ");
}
System.out.println();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: