0

我正在尝试使用 YOURLS 创建自定义 URL 缩短器。当我在 YOURLS 中使用内置 API 时,这就是 chrome 作为 XML 文档出现的内容:

<result>
<url>
<keyword>2</keyword>
<url>http://www.bing.com</url>
<title>http://www.bing.com</title>
<date>2013-06-08 19:24:28</date>
<ip>127.0.0.1</ip>
</url>
<status>success</status>
<message>http://www.bing.com added to database</message>
<title>http://www.bing.com</title>
<shorturl>http://127.0.0.1/2</shorturl>
<statusCode>200</statusCode>
</result>

我只想要“shorturl”中的东西

但是,我在 eclipse 中遇到错误

    URL url=null;
    try {
        url = new URL("http://localhost/yourls/yourls-api.php?username=username&password=password&action=shorturl&url="+"http://google.ca");
        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream()));
        String s = null;

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = (Document) db.parse((url).openStream());

        XPath xpath = XPathFactory.newInstance().newXPath();
        XPathExpression expr = (XPathExpression) xpath.compile("shorturl");
        Object exprResult = expr.evaluate(doc, XPathConstants.NODESET);
        NodeList nodeList = (NodeList) exprResult;

        }

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

Object exprResult = expr.evaluate(doc, XPathConstants.NODESET);

错误提示“XPathExpressions 类型中的方法评估(节点,短,对象)不适用于参数(文档,QName)”

有人知道如何解决这个问题吗?

4

2 回答 2

1

我的猜测是您有一个名为 XPathExpression 的类的导入,但这不是标准的javax.xml.xpath.XPathExpression. 这也可以解释为什么您的代码中有强制转换:

XPathExpression expr = (XPathExpression) xpath.compile("shorturl");

如果导入的类是javax.xml.xpath.XPathExpression. 编译器可能对简单的赋值不满意,IDE 建议通过添加强制转换来“修复”它。但问题是您导入了错误的类。

于 2013-06-08T21:48:51.707 回答
0

这里的错误消息告诉你你需要的一切:你的evaluate方法调用有错误的签名。要么传递正确的参数(Node、short、Object),要么使用您喜欢的签名(即(Document、QName))重载方法。您必须从当前使用的参数构建正确的参数,或者您必须编写自己的evaluate方法版本。

于 2013-06-08T21:47:41.123 回答