Xpath返回空元素对象
问题描述:
我有一个XML文档作为一个字符串没有任何命名空间,我想解析它使用Java,JDOM和XPath,并创建一个对象树。由于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);
}
最后一行返回空,不为空,但它里面抛出JDOM例外。
答
XPath和XML不需要命名空间。回到原来的XML并删除代码中的任何名称空间/前缀hackery。
原始xml中没有命名空间 – Spring 2011-05-01 11:01:07
非常感谢,但它的工作!我认为你必须需要一个命名空间来使用Xpath,但是我认为这是真的,如果你已经在你的xml中有一个命名空间? – Spring 2011-05-01 11:35:32
是的,当XML数据使用命名空间时,您只需在代码中使用名称空间和前缀。 – 2011-05-01 11:38:59