java - español - itext html to pdf
La forma más sencilla de consultar XML en Java (9)
@Los comentarios de esta respuesta :
Puedes crear un método para hacerlo más simple
String xml = "<resp><status>good</status><msg>hi</msg></resp>";
System.out.printf("satus= %s/n", getValue("/resp/status", xml ) );
La implementación:
public String getValue( String path, String xml ) {
return XPathFactory
.newInstance()
.newXPath()
.evaluate( path , new InputSource(
new StringReader(xml)));
}
Tengo pequeñas cadenas con XML, como:
String myxml = "<resp><status>good</status><msg>hi</msg></resp>";
Que quiero consultar para obtener su contenido.
¿Cuál sería la forma más sencilla de hacer esto?
Aquí hay un ejemplo de cómo hacer eso con 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());
Me gusta XOM más que dom4j por su simplicidad y corrección . XOM no le permitirá crear XML no válido incluso si desea ;-) (por ejemplo, con caracteres ilegales en datos de caracteres)
Aquí hay un fragmento de código de consulta de su XML con 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));
}
}
Después de que haya terminado con formas sencillas de consultar XML en java. Mira a XOM.
Podrías probar JXPath
Puedes usar Jerry para consultar XML similar a jQuery.
jerry(myxml).$("status")
Usando dom4j , similar a la solución de 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);
El manejo de XML es un poco más simple usando dom4j. Y exist muchas otras bibliotecas XML comparables. Las alternativas a dom4j se discuten aquí .
convierte esta cadena en un objeto DOM y visita los nodos:
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);
}
XPath usando Java 1.5 y superior, sin dependencias externas:
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);