2011-05-01 133 views
0

我有一个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例外。

回答

1

XPath和XML不需要命名空间。回到原来的XML并删除代码中的任何名称空间/前缀hackery。

+0

原始xml中没有命名空间 – Spring 2011-05-01 11:01:07

+0

非常感谢,但它的工作!我认为你必须需要一个命名空间来使用Xpath,但是我认为这是真的,如果你已经在你的xml中有一个命名空间? – Spring 2011-05-01 11:35:32

+0

是的,当XML数据使用命名空间时,您只需在代码中使用名称空间和前缀。 – 2011-05-01 11:38:59