错误:无法将java.lang.String转换为org.w3c.dom.Node

错误:无法将java.lang.String转换为org.w3c.dom.Node,java,xml,xpath,Java,Xml,Xpath,我正在尝试解析xml字符串,但发现java.lang.string无法转换为org.w3c.dom.Node错误 这是我正在使用的代码: XPathFactory xPathFactory = XPathFactory.newInstance(); XPath xPath = xPathFactory.newXPath(); String expression = "//Home/ListOfCustomers"; XPath

我正在尝试解析xml字符串,但发现java.lang.string无法转换为org.w3c.dom.Node错误

这是我正在使用的代码:

        XPathFactory xPathFactory = XPathFactory.newInstance();

        XPath xPath = xPathFactory.newXPath();

        String expression = "//Home/ListOfCustomers";

        XPathExpression xPathExpression = xPath.compile(expression);

        Object nl = xPathExpression.evaluate(xmlResp);
以下是XML字符串的构造方式:

<?xml version="1.0" encoding="ISO-8859-1"?>
<Home>
      <ListOfCustomers type="Regular" count="939">
           <Customer>
            <CustName>xyz</CustName>
           </Customer>
           <Customer>
            <CustName>abc</CustName>
           </Customer>
           <Customer>
            <CustName>def</CustName>
           </Customer>
       </ListOfCustomers>
</Home>

我在这里遗漏了什么?

只是快速查看一下文档:

然后api为编译定义了以下内容: 项-例如,起始上下文节点或节点列表

因此,假设这是您正在使用的方法,看起来您需要发送一个节点或节点列表,而不仅仅是一个字符串

对象nl=xPathExpression.evaluatexmlResp

这就是问题所在。使用该方法的单个参数,它期望InputSource或Object类型的变量,您是否向其中任何一个声明了xmlResp?另外,这两个方法都返回字符串类型,那么为什么要将其赋值给Object类型的变量呢

既然您有xml文件,为什么不将xmlResp初始化为InputSource类型呢?然后对inputsource使用xPathExpression求值?类似下面的内容

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;


public class XMLParser
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        try {

        XPathFactory xPathFactory = XPathFactory.newInstance();
        XPath xPath = xPathFactory.newXPath();

        InputSource doc = new InputSource(new InputStreamReader(new FileInputStream(new File("file.xml"))));

        String expression = "//Home/ListOfCustomers";
        XPathExpression xPathExpression = xPath.compile(expression);

        NodeList elem1List = (NodeList) xPathExpression.evaluate(doc, XPathConstants.NODESET);
        xPathExpression = xPath.compile("@type");

        for (int i = 0; i < elem1List.getLength(); i++)
        {
            System.out.println(xPathExpression.evaluate(elem1List.item(i), XPathConstants.STRING)); 
        }


        }
        catch (XPathExpressionException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

@投了反对票但不想留下评论的人:$%&&*$小心,这样的评论可能会让你投更多的反对票。不要亲自投反对票,问问自己是否遵循了和中的指导原则。还要认识到你会得到一些无法解释的反对票。。。这正是SO的本质。有时我也很困惑,看到编程代码在这个问题上投了反对票。对我来说,这些都是sof的有效问题:无论如何,我投你一票。干杯。投票结果也是一样……非常接近。我没有xml文件。它是xml字符串。我并没有首先将其转换为文档。这就是错误所在。@Asdfg太糟糕了,如果我们只有一个字符串,您没有给出建议,例如,在消息服务中,它在这里: