在Java中查询XML的最简单方法

我有XML的小字符串,如:

String myxml = "goodhi"; 

我想查询以获取其内容。

最简单的方法是什么?

使用Java 1.5及更高版本的XPath ,没有外部依赖:

 String xml = "goodhi"; 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 = "goodhi"; 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 = "goodhi"; 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 = "goodhi"; 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="goodhi"; 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")