在Java中查询XML的最简单方法
我有XML的小字符串,如:
String myxml = "goodhi";
我想查询以获取其内容。
最简单的方法是什么?
使用Java 1.5及更高版本的XPath ,没有外部依赖:
String xml = "good hi "; XPathFactory xpathFactory = XPathFactory.newInstance(); XPath xpath = xpathFactory.newXPath(); InputSource source = new InputSource(new StringReader(xml)); String status = xpath.evaluate("/resp/status", source); System.out.println("satus=" + status);
使用dom4j ,类似于McDowell的解决方案 :
String myxml = "good hi "; Document document = new SAXReader().read(new StringReader(myxml)); String status = document.valueOf("/resp/msg"); System.out.println("status = " + status);
使用dom4j,XML处理有点简单。 还存在其他几个可比较的XML库。 这里讨论 dom4j的替代方案。
以下是如何使用XOM执行此操作的示例:
String myxml = "good hi "; Document document = new Builder().build(myxml, "test.xml"); Nodes nodes = document.query("/resp/status"); System.out.println(nodes.get(0).getValue());
我喜欢XOM而不是dom4j,因为它的简单性和正确性 。 即使你想要,XOM也不会让你创建无效的XML ;-)(例如,在字符数据中使用非法字符)
你可以试试JXPath
完成后用简单的方法在java中查询XML。 看看XOM。
将此字符串转换为DOM对象并访问节点:
Document dom= DocumentBuilderFactory().newDocumentBuilder().parse(new InputSource(new StringReader(myxml))); Element root= dom.getDocumentElement(); for(Node n=root.getFirstChild();n!=null;n=n.getNextSibling()) { System.err.prinlnt("Current node is:"+n); }
@这个答案的评论:
您可以创建一个方法,使其看起来更简单
String xml = "good hi "; System.out.printf("satus= %s\n", getValue("/resp/status", xml ) );
实施:
public String getValue( String path, String xml ) { return XPathFactory .newInstance() .newXPath() .evaluate( path , new InputSource( new StringReader(xml))); }
这是使用VTD-XML查询XML的代码片段
import com.ximpleware.*; public class simpleQuery { public static void main(String[] s) throws Exception{ String myXML="good hi "; VTDGen vg = new VTDGen(); vg.setDoc(myXML.getBytes()); vg.parse(false); VTDNav vn = vg.getNav(); AutoPilot ap = new AutoPilot(vn); ap.selectXPath("/resp/status"); int i = ap.evalXPath(); if (i!=-1) System.out.println(" result ==>"+vn.toString(i)); } }
您可以使用Jerry查询类似于jQuery的XML。
jerry(myxml).$("status")