我正在尝试解析 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)
我在这里缺少什么?
对象 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)
| 归档时间: |
|
| 查看次数: |
14904 次 |
| 最近记录: |