Самый простой способ запросить XML в Java - PullRequest
17 голосов
/ 30 апреля 2009

У меня есть небольшие строки с XML, например:

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

который я хочу запросить, чтобы получить их содержание.

Какой самый простой способ сделать это?

Ответы [ 9 ]

34 голосов
/ 30 апреля 2009

XPath с использованием Java 1.5 и выше, без внешних зависимостей:

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);
7 голосов
/ 07 мая 2009

Использование dom4j , аналогично решению Макдауэлла :

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

Обработка XML немного проще с использованием dom4j. И несколько других сопоставимых XML-библиотек существуют . Альтернативы dom4j обсуждаются здесь .

6 голосов
/ 07 мая 2009

Вот пример того, как это сделать с 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 за его простоту и правильность . XOM не позволит вам создать недопустимый XML, даже если вы захотите ;-) (например, с недопустимыми символами в символьных данных)

2 голосов
/ 07 мая 2009

@ Комментарии этого ответа :

Вы можете создать метод, чтобы он выглядел проще

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

}
2 голосов
/ 06 мая 2009

После того, как вы сделали с простыми способами запросить XML в Java. Посмотрите на XOM.

2 голосов
/ 30 апреля 2009

Вы можете попробовать JXPath

1 голос
/ 30 апреля 2009

преобразовать эту строку в объект 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);
 }
0 голосов
/ 13 марта 2018

Вы можете использовать Джерри для запроса XML, аналогичного jQuery.

jerry(myxml).$("status")
0 голосов
/ 19 декабря 2015

Вот фрагмент кода запроса вашего XML с помощью VTD-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));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...