J'essaie d'apprendre l'analyse XML ici et j'ai reçu un code pour commencer. J'ai fait quelques recherches sur les différentes API que j'utilise et j'ai graduellement pu déboguer mon code en quelque chose qui, je l'espère, fonctionnera. J'essaie d'analyser les fichiers XML en câblant durement les requêtes XPath dans une variable de chaîne. J'utilise aussi DocumentBuilderFactory si cela aide du tout. Quoi qu'il en soit, je continue d'obtenir cette exception: Java.lang.String ne peut pas être converti en org.w3c.dom.Node (je l'ai marqué dans le code ci-dessous). Je comprends ce que sont les erreurs. La requête de chaîne ne semble pas être en accord avec les paramètres de la méthode "evaluate". Je ne sais pas comment le réparer. J'ai essayé toutes sortes de moulages différents et ils ne fonctionnent pas. Quelque chose me dit que je fais quelque chose d'horriblement mauvais ici ... aidez s'il vous plaît! PS. Je suis désolé mon code est un désordre, je suis totalement nouveau à l'analyse, je sais aussi qu'il y a des importations inutiles mais je suppose que je pourrais en avoir besoin si je fais quelques changements.Analyse XML avec Java XPath Query, Erreur:
code:
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import org.jaxen.JaxenException;
import org.jaxen.dom.DOMXPath;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class Parser
{
public static void main(String[] args)
{
boolean isNamespaceAware = true;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(isNamespaceAware);
DocumentBuilder builder = null;
try
{
builder = dbf.newDocumentBuilder();
}
catch (ParserConfigurationException e2)
{
e2.printStackTrace();
}
try
{
Document workingDocument =
builder.parse("C:\\Users\\Brandon\\Job\\XPath\\XPath_Sample_Stuff\\XPath_Objects.xml");
}
catch (SAXException e1)
{
e1.printStackTrace();
}
catch (IOException e1)
{
e1.printStackTrace();
}
String xPathQuery = "/book/author";
DOMXPath generatedPath;
String results = null;
try
{
generatedPath = new DOMXPath(xPathQuery);
//Here is the errror
results = generatedPath.evaluate(xPathQuery);
}
catch (JaxenException e)
{
e.printStackTrace();
}
if(results == null)
System.err.println("There was an issue processing the xpath, and
results were still null.");
for (int i=0; i<= results.getLength();i++)
{
System.out.println(results.item(i));
}
}
}
Voici quelques XML à partir d'un fichier XML m'a donné:
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with XML.</description>
</book>
Qu'est-ce que Jaxen et DOMXPath? Ceux-ci ne font pas partie du core Java autant que je sache et ne sont généralement pas utilisés avec XPath (encore autant que je sache). Pourquoi ne pas simplement utiliser des classes Java standard pour le faire? –
Aussi, vous voudrez commencer avec un fichier XML relativement simple et publier ce fichier ici avec votre question. –
Ouais, Comme je l'ai dit on m'a donné le code, donc je ne suis pas vraiment sûr de moi-même. J'ai également importé un jar externe de sorte que c'est peut-être d'où DOMXPath est venu. Soupir ... Mais j'essaie d'obtenir le code qui m'a été donné pour travailler, je ne veux pas écrire une nouvelle classe d'analyseur à moins que je doive le faire. –