XPath的使用
2015-10-11 14:32
351 查看
前面介绍了Jsoup,现在记录一下XPath
XPath主要是NodeSet和Node,NodeSet是节点的集合,Node是一个节点。其他的是一样的操作。
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(); } }
相关文章推荐
- Hashtable、HashMap、TreeMap
- web.xml 的加载过程
- jQuery插件之TreeMultiselect 多用于权限配置
- 设计模式(5)-策略模式Strategy
- spring applicationContext.xml的配置文件详解
- Android详细的对话框AlertDialog.Builder使用方法
- 第五周学习报告
- Create Access Point on Archlinux
- java线程的同步
- Android 中级教程之------Android MediaPlayer播放mp3的实例!
- Eclipse快捷键大全(转载)
- xcode终于找到如何对单个文件进行编译了
- 摘录
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #7
- [MFC]Squres程序:单文档界面演示
- 微信开发第二讲 开发与微信交互的servlet
- J2SE 抽象类,接口
- 软件测试从零开始—走进软件测试
- 通过Map拼凑url
- Angularjs 模块化