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

Asd*_*dfg 5 java xml xpath

我正在尝试解析 xml 字符串,但java.lang.String cannot be cast to 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);
Run Code Online (Sandbox Code Playgroud)

这是 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>
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?

Jas*_*onw 2

对象 nl = xPathExpression.evaluate(xmlResp);

这就是这里的问题。使用评估方法的单个参数,它需要输入源或对象类型的变量,您是否为其中任何一个声明了 xmlResp?另外,这两个方法都返回 String 类型,那么为什么要分配给 Object 类型的变量呢?

既然您有 xml 文件,为什么不将 xmlResp 初始化为 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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Asdfg太糟糕了,如果我们只有一个字符串(例如在消息传递服务中),你没有给出建议,它在这里:/sf/ask/1169867401/ java-xpath (2认同)