Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Xpath返回空元素对象_Java_Xpath_Jdom - Fatal编程技术网

Java Xpath返回空元素对象

Java Xpath返回空元素对象,java,xpath,jdom,Java,Xpath,Jdom,我有一个xml文档作为字符串,没有任何名称空间,我想使用Java、JDOM和XPath解析它,并创建一个对象树。因为XPAth总是需要一个前缀和一个名称空间来查询,所以我将名称空间和一个前缀添加到根中,然后再添加到我想要获取的节点中,但是我看到XPAth在文档中的每个节点中都需要一个名称空间,但只在根中 那么,在开始时,有没有一种方法可以将名称空间添加到文档对象中的所有元素中,从而使xpath查询正常工作 代码中还应该有其他错误和糟糕的方法。我很乐意接受任何意见 String response=

我有一个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异常。

XPath和XML不需要名称空间。返回到原始XML,删除代码中的任何名称空间/前缀黑客行为。

原始XML中没有名称空间。谢谢,非常有趣,但它确实有效!我认为必须使用名称空间才能使用Xpath,但如果您的xml中已经有名称空间,我认为这是正确的?是的,当xml数据使用名称空间时,您只需要在代码中使用名称空间和前缀。谢谢,是否还需要将字符串转换为byteinputstream来创建文档对象?对不起,我对Java和XML的理解还不够快。张贴问题,希望其他人会回答。