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

时间:2009-04-30 15:11:13

标签: java xml

我使用XML编写小字符串,例如:

String myxml = "<resp><status>good</status><msg>hi</msg></resp>";

我想查询以获取其内容。

最简单的方法是什么?

9 个答案:

答案 0 :(得分:34)

使用Java 1.5及更高版本的

XPath,没有外部依赖:

String xml = "<resp><status>good</status><msg>hi</msg></resp>";

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);

答案 1 :(得分:7)

使用dom4j,类似于McDowell's solution

String myxml = "<resp><status>good</status><msg>hi</msg></resp>";

Document document = new SAXReader().read(new StringReader(myxml));
String status = document.valueOf("/resp/msg");

System.out.println("status = " + status);
使用dom4j,XML处理有点简单。以及其他几个类似的XML库exist。 dom4j的替代品是discussed here

答案 2 :(得分:6)

以下是使用XOM

执行此操作的示例
String myxml = "<resp><status>good</status><msg>hi</msg></resp>";

Document document = new Builder().build(myxml, "test.xml");
Nodes nodes = document.query("/resp/status");

System.out.println(nodes.get(0).getValue());

我喜欢XOM而不是dom4j的simplicity and correctness。即使您想要使用XOM也不会让您创建无效的XML ;-)(例如,在字符数据中使用非法字符)

答案 3 :(得分:2)

您可以尝试JXPath

答案 4 :(得分:2)

完成后用简单的方法在java中查询XML。看看XOM。

答案 5 :(得分:2)

@ answer的评论:

您可以创建一种方法使其看起来更简单

String xml = "<resp><status>good</status><msg>hi</msg></resp>";

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)));

}

答案 6 :(得分:1)

将此字符串转换为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);
 }

答案 7 :(得分:0)

以下是使用VTD-XML

查询XML的代码段
import com.ximpleware.*;
public class simpleQuery {

    public static void main(String[] s) throws Exception{
        String myXML="<resp><status>good</status><msg>hi</msg></resp>";
        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));
    }
}

答案 8 :(得分:0)

您可以使用Jerry查询类似于jQuery的XML。

jerry(myxml).$("status")