用xpath解决字符串和xml
发布时间:2020-12-16 05:20:49 所属栏目:百科 来源:网络整理
导读:package xpath;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationEx
package xpath; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; 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.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class XPathTest { /** * @param args */ public static void main(String[] args) { // test(); soapTest(); } private static void test() { // xml文档的形式读入 InputStream is = XPathTest.class.getClassLoader().getResourceAsStream( "book.xml"); try { DocumentBuilder db = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); Document doc = db.parse(is); XPath xpath = XPathFactory.newInstance().newXPath(); NodeList nodeList = (NodeList) xpath.evaluate( "//book[@category="WEB"]",doc,XPathConstants.NODESET); for (int i = 0; i < nodeList.getLength(); i++) { Element e = (Element) nodeList.item(i); NodeList subList = e.getElementsByTagName("author"); for (int j = 0; j < subList.getLength(); j++) { System.out.println(subList.item(j).getTextContent()); } // String text = (String)nodeList.item(i).getTextContent(); // System.out.println(text); } } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XPathExpressionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void soapTest() { try { DocumentBuilder db = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); // 字符串的形式读入 String str = "<req><res error="0" affected="1"></res><rset><row><rv>DayPass,DayPassPlus</rv></row></rset></req>"; InputStream in = new ByteArrayInputStream(str.getBytes()); Document doc = db.parse(in); XPath xpath = XPathFactory.newInstance().newXPath(); NodeList responseTextList = (NodeList) xpath.evaluate("//rv",XPathConstants.NODESET); NodeList responseError = (NodeList) xpath.evaluate("//res",XPathConstants.NODESET); String error = responseError.item(0).getAttributes() .getNamedItem("error").getTextContent(); String responseText = responseTextList.item(0).getTextContent(); System.out.println("error: " + error + ",text: " + responseText); // System.out.println(list.item(0).getTextContent()); /* * for(int i = 0; i < list.getLength(); i++){ Element e = * (Element)list.item(i); String re = e.getNodeValue(); * System.out.println(re); } */ } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XPathExpressionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } <?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |