ошибка: java.lang.String не может быть приведен к org.w3c.dom.Node - PullRequest
2 голосов
/ 15 марта 2012

Я пытаюсь разобрать строку 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);

Вот как строится строка 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>

Что мне здесь не хватает?

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Object nl = xPathExpression.evaluate (xmlResp);

Это проблема здесь.С единственным аргументом метода valuate он ожидает либо переменную типа InputSource, либо Object. Вы объявили 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();
        }
    }
}
1 голос
/ 15 марта 2012

Просто взглянем на документы: http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/xpath/XPathExpression.html#evaluate(java.lang.Object)

Тогда API определяет это для компиляции: item - Начальный контекст (например, узел или список узлов).

Итак, если вы используете этот метод, похоже, вам нужно отправить узел - или список узлов, а не просто строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...