Java XPath解析XML总结
XPath解析XML步骤
//student.xml文件 <?xml version="1.0" encoding="utf-8"?> <students> <student class="1201"> <name>李小离</name> <sex>男</sex> <age>25</age> </student> <student class="1201"> <name>林志玲</name> <sex>女</sex> <age>25</age> </student> <student class="1201"> <name>廖新峰</name> <sex>男</sex> <age>25</age> </student> <student class="1302"> <name>张军</name> <sex>男</sex> <age>25</age> </student> <student class="1302"> <name>任峰</name> <sex>男</sex> <age>25</age> </student> </students>
1. 创建一个XPathFactory的实例
XPathFactory xf = new XPathFactory();
2. 通过XPathFactory的实例获取一个XPath实例
XPath x = xf.newXPath();
3. 通过XPath实例的evaluate()方法对XML进行查询
String evaluate(String expression,InputSource source);
Object evaluate(String expression,InputSource source,return returnType);
参数说明
expression:为XPath语法的查询语句。
source :输入查询的*.xml的来源
returnType:返回结果的类型有:XPathConstants.NODE(单个元素),XPathConstants.NODESET(元素的集合)
public void getSelectXML(String query_sentences) throws XPathExpressionException { XPathFactory pathFactory = XPathFactory.newInstance(); XPath path = pathFactory.newXPath(); //该student.xml文件为于src目录下。 InputStream in =SelectXML.class.getResourceAsStream("/student.xml"); InputSource source = new InputSource( in ); //InputSource使用一次就会关闭,再次使用就用再new一次。 //XPath语法的具体链接:http://www.w3school.com.cn/xpath/xpath_syntax.asp String query_sentences = "/students/student/[name=‘李小离’]/age"。 //通过姓名为“李小离”查询他的年龄。 //String evaluate(String expression,InputSource source); String age = (Node) path.evaluate(query_sentences, source); sysotem.out.println("李小离的年龄是: " + age); }
Java xpath解析XML主要方法
//contact.xml <?xml version="1.0" encoding="utf-8"?> <contactList> <contact id="001" class="style"> <name>张三</name> <age>20</age> <phone>134222223333</phone> <email>zhangsan@qq.com</email> <qq>432221111</qq> </contact> <contact id="002"> <name>李四</name> <age>20</age> <phone>134222225555</phone> <email>lisi@qq.com</email> <qq>432222222</qq> </contact> <contactTwo> <name>王五</name> <age>32</age> <phone>465431341</phone> <emali>af@qq.com</emali> <qq>46164694</qq> </contactTwo> <test>测试</test> <test>其他用途</test> </contactList>
1. xpath selectNodes查询多个节点对象
/** *selectNode的使用方法 */ public class xpathDemo { public static void main(String[] args) throws Exception { Document doc = new SAXReader().read(new File("./src/contact.xml")); /** * @param xpath 表示xpath语法变量 */ 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); } //写出xml文件 //输出位置 FileOutputStream out = new FileOutputStream("d:/contact.xml"); //指定格式 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("utf-8"); XMLWriter writer = new XMLWriter(out, format); //写出内容 writer.write(doc); //关闭资源 writer.close(); } }
2. xpath selectSingleNode查询一个节点对象
/** *selectSingleNode的使用 */ public class xpathDemo1{ public static void main(String[] args) throws Exception{ //读取XML文件,获得document对象 SAXReader saxReader = new SAXReader(); Document doc = saxReader.read(new File("./src/contact.xml")); //使用xpath获取某个节点 String xpath = ""; //对contact元素 id="001"的节点,操作 xpath = "//contact[@id = '001']"; Element contactElem = (Element)doc.selectSingleNode(xpath); //设置这个节点的属性值 contactElem.addAttribute("name", "001"); //输出这个节点的所有属性值 for(Iterator it = contactElem.attributeIterator();it.hasNext();){ Attribute conAttr = (Attribute)it.next(); String conTxt = conAttr.getValue(); String conAttrName = conAttr.getName(); System.out.println(conAttrName+" = "+conTxt); } } }
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。