我有这个xml文件,我想用Xpath获取一些值.
工作的一半已经完成但我在文件的最后部分遇到了一些麻烦(States Node)
wf1description 1
2
text text text text text text text
description1
description2
wf2description 2
3
text text text text text text text
description1
description2
description2
这里是java代码:
包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 );
}
}
}
}
输出将是:
第一个例子
wf1000 wf1 description 1 2 text text text text text text text
2
description1
description1
第二个例子
wf2000 wf2 description 2 3 text text text text text text text
3
description1
description1
description1
查看ID为2的状态,文本为description2而不是description1.
我认为解析器不会移动到第二个孩子,它总是仍然在最小的孩子.
那么我该怎么做以及如何做才能获得状态的属性????????