我有一个xml文档作为没有任何命名空间的字符串,我想用Java,JDOM和XPath解析它,并创建一个对象树。由于XPAth总是需要一个前缀和一个命名空间来查询,我添加了命名空间和前缀到根,然后添加到我想要的节点,但我看到Xpath需要文档中每个节点的命名空间,但只在根目录中
所以一开始是否有办法将命名空间添加到文档对象中的所有元素,以便我的xpath查询正常工作?
代码中也应该存在其他错误和错误的方法。任何想法都会很高兴。
String response="myXmlString"
ByteArrayInputStream stream = new ByteArrayInputStream(
response.getBytes());
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(stream);
org.jdom.Element request=(org.jdom.Element) doc.getRootElement();
request.setNamespace(Namespace.getNamespace("myNamespace"));
createRequest(request);
然后
public Request createRequest(Element requestXML) {
Request request = new Request();
requestXML.detach();
Document doc = new Document(requestXML);
XPath xpath = XPath.newInstance(myExpression);
xpath.addNamespace("m", doc.getRootElement().getNamespaceURI());
xpath.selectSingleNode(doc);
}
这最后一行返回空,它不是null但它会抛出jdom异常。
答案 0 :(得分:1)
XPath和XML不需要命名空间。返回原始XML并删除代码中的任何名称空间/前缀hackery。