L'analyse de XML avec XPath en Java - Obtenir les données à partir du fichier XML avec Xpath et NodeList en Java
J'ai ce fichier xml et je veux obtenir certaines valeurs avec Xpath.
La moitié du travail est fait mais j'ai quelques difficultés dans la dernière partie du fichier(États Nœud)
<?xml version="1.0" encoding="UTF-8"?>
<favoris>
<workflow codewf="wf1000">
<information>
<title>wf1</title>
<desc>description 1</desc>
<nberState>2</nberState>
<text>text text text text text text text</text>
</information>
<states>
<state id="1" IDemployee="2">description1</state>
<state id="2" IDemployee="3">description2</state>
</states>
</workflow>
<workflow codewf="wf2000">
<information>
<title>wf2</title>
<desc>description 2</desc>
<nberState>3</nberState>
<text>text text text text text text text</text>
</information>
<states>
<state id="1" IDemployee="3">description1</state>
<state id="2" IDemployee="2">description2</state>
<state id="3" IDemployee="4">description2</state>
</states>
</workflow>
</favoris>
Et voici le code java:
package myxml;
import java.io.FileReader;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
public class xmlParty {
public static void main(String[] args) throws Exception {
XPathFactory factory = XPathFactory.newInstance();
XPath xPath = factory.newXPath();
NodeList favoris = (NodeList) xPath.evaluate("/favoris/workflow[@codewf='wf1000']",
new InputSource(new FileReader("a.xml")),
XPathConstants.NODESET);
for (int i = 0; i < favoris.getLength(); i++) {
Element workflow = (Element) favoris.item(i);
String title = xPath.evaluate("information/title", workflow);
String desc_w = xPath.evaluate("information/desc", workflow);
String nberState = xPath.evaluate("information/nberState", workflow);
String text = xPath.evaluate("information/text", workflow);
System.out.println(workflow.getAttribute("codewf") +" "+title + " " + desc_w + " " + nberState + " " + text );
NodeList States = (NodeList)xPath.evaluate("states/state", workflow, XPathConstants.NODESET);
System.out.println(States.getLength());
for (int k = 0; k < States.getLength(); k++) {
String desc_state = xPath.evaluate("states/state", workflow);
System.out.println(desc_state );
}
}
}
}
et la sortie sera :
Premier exemple
wf1000 wf1 description 1 2 text text text text text text text
2
description1
description1
Deuxième exemple
wf2000 wf2 description 2 3 text text text text text text text
3
description1
description1
description1
Regardant l'état avec l'ID 2, le texte est description2
pas description1
.
Je pense que l'analyseur ne bouge pas pour le deuxième enfant et il reste toujours à la firsst enfant.
Alors, comment puis-je faire et comment le faire de façon à obtenir l'attribut de l'état????????
Ne devriez-vous pas faire une itération sur les États NodeList?!
J'ai eu un briallint réponse à cette question sur la stackoverflow.com/a/21890347/3245218
J'ai eu un briallint réponse à cette question sur la stackoverflow.com/a/21890347/3245218
OriginalL'auteur Ali Ben Messaoud | 2011-04-15
Vous devez vous connecter pour publier un commentaire.
Vous aurez à faire quelque chose comme:
J'ai édité la réponse.
Je suis à l'aide de xpath dans java pour xml signatures, mais la transformation xpath ne fonctionne pas. Veuillez consulter ce lien stackoverflow.com/questions/10698287/...
OriginalL'auteur nabeelmukhtar