У меня есть небольшие строки с XML, например:
String myxml = "<resp><status>good</status><msg>hi</msg></resp>";
который я хочу запросить, чтобы получить их содержимое.
Каким будет самый простой способ сделать это?
У меня есть небольшие строки с XML, например:
String myxml = "<resp><status>good</status><msg>hi</msg></resp>";
который я хочу запросить, чтобы получить их содержимое.
Каким будет самый простой способ сделать это?
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);
Использование dom4j, похожее на решение McDowell:
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 обсуждаются здесь.
Вот пример того, как это сделать с помощью 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, даже если вы хотите;-) (например, с незаконными символами в символьных данных)
Вы можете попробовать JXPath
После выполнения простых способов запроса XML в java. Посмотрите на 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 = "<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)));
}
Вот фрагмент кода запроса вашего 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));
}
}