在我下面的代码中,我试图使用XPath访问我的'handler‘XML元素,但是我没有运气-- 'elemHandler’元素总是空的。有人能和我分享一下显而易见的解决方案吗?提前谢谢。
import java.io.IOException;
import java.io.StringReader;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;
public class XPathTest {
private static String jobString = "<job name=\"Workflow.JOB\">" +
" <handler name=\"xslt.converter\"/>" +
" <handler name=\"openoffice.renderer\">" +
" <opts input=\"ODS\" output=\"PDF\"/>" +
" </handler>" +
"</job>";
public static void main(String[] args) {
try {
Element elemJobInfo = new SAXBuilder().build(new StringReader(jobString)).detachRootElement();
XPath handlerExpression = XPath.newInstance("//stp:handler[2]");
handlerExpression.addNamespace("stp", "http://service.mine.org/dgs");
Element elemHandler = (Element) handlerExpression.selectSingleNode(elemJobInfo);
jobString = elemHandler.toString();
}
catch (IOException e) {
System.out.println("Failure: " + e);
}
catch (JDOMException e) {
System.out.println("Failure: " + e);
}
catch (Exception e) {
System.out.println("Failure: " + e);
}
}
}发布于 2010-07-25 05:19:55
stp名称空间是怎么回事?jobString中的XML没有引用任何名称空间。你有没有试过不加前缀?
//handler[2]发布于 2010-07-25 06:22:39
XPath表达式所针对的XML文档:
//stp:handler[2]
被计算,没有默认或声明的命名空间,并且所有节点都在“无命名空间”中。"http://service.mine.org/dgs"命名空间中没有任何节点。除非在实际情况中使用的是另一个XML文档,否则上面的表达式不能选择任何节点--这正是您得到的结果。
如果您正在使用一个没有显示的文档,它实际上有一个默认的名称空间,那么您很可能在Java代码中拼写错误了名称空间。
此外,一定要尝试XPath表达式的这种变体(带或不带名称空间前缀):
(//stp:handler)[2]
https://stackoverflow.com/questions/3326942
复制相似问题