Je suis en train d'obtenir une valeur d'attribut à partir d'un fichier XML, mais mon code échoue à l'exception ci-dessous:expression XPath pour obtenir une valeur d'attribut échoue en Java
11-15 16: 34: 42,270: DEBUG/XpathUtil (403): = exception javax.xml.xpath.XPathExpressionException: javax.xml.transform.TransformerException: jetons supplémentaires illégales: '@', 'source'
Voici le code que j'utilise pour obtenir la liste des nœuds:
private static final String XPATH_SOURCE = "array/[email protected]";
mDocument = XpathUtils.createXpathDocument(xml);
NodeList fullNameNodeList = XpathUtils.getNodeList(mDocument,
XPATH_FULLNAME);
Et voici ma XpathUtils
classe:
public class XpathUtils {
private static XPath xpath = XPathFactory.newInstance().newXPath();
private static String TAG = "XpathUtil";
public static Document createXpathDocument(String xml) {
try {
Log.d(TAG , "about to create document builder factory");
DocumentBuilderFactory docFactory = DocumentBuilderFactory
.newInstance();
Log.d(TAG , "about to create document builder ");
DocumentBuilder builder = docFactory.newDocumentBuilder();
Log.d(TAG , "about to create document with parsing the xml string which is: ");
Log.d(TAG ,xml);
Document document = builder.parse(new InputSource(
new StringReader(xml)));
Log.d(TAG , "If i see this message then everythings fine ");
return document;
} catch (Exception e) {
e.printStackTrace();
Log.d(TAG , "EXCEPTION OCCURED HERE " + e.toString());
return null;
}
}
public static NodeList getNodeList(Document doc, String expr) {
try {
Log.d(TAG , "inside getNodeList");
XPathExpression pathExpr = xpath.compile(expr);
return (NodeList) pathExpr.evaluate(doc, XPathConstants.NODESET);
} catch (Exception e) {
e.printStackTrace();
Log.d(TAG, "exception = " + e.toString());
}
return null;
}
// extracts the String value for the given expression
public static String getNodeValue(Node n, String expr) {
try {
Log.d(TAG , "inside getNodeValue");
XPathExpression pathExpr = xpath.compile(expr);
return (String) pathExpr.evaluate(n, XPathConstants.STRING);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
je reçois une exception levée dans la méthode getNodeList
. Maintenant, selon http://www.w3schools.com/xpath/xpath_syntax.asp, pour obtenir une valeur d'attribut, vous utilisez le signe "@". Mais pour une raison quelconque, Java se plaint de ce symbole.