我使用XML编写小字符串,例如:
String myxml = "<resp><status>good</status><msg>hi</msg></resp>";
我想查询以获取其内容。
最简单的方法是什么?
答案 0 :(得分:34)
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")