如何解析Play WS响应中的HTML

时间:2014-06-12 17:13:46

标签: java web-services playframework-2.0

我有一个Play 2.2应用程序,我正在进行WS调用,并希望解析响应中返回的HTML。我想查找特定的输入元素并读取存储在其中的值。 input元素只有一个名为authenticity_token(无ID)的名称属性。这是代码:

final Promise<WS.Response> loginPagePromise = WS.url("https://www.mysite.com/login").get();

        Promise<String> authToken = loginPagePromise.map(
                new Function<WS.Response, String>() {
                    public String apply(WS.Response response) {
                        Document doc = response.asXml();
                        NodeList inputElements = doc.getElementsByTagName("input");
                        for (int i = 0; i < inputElements.getLength(); i++) {
                            System.out.print("Item "+(i+1));
                            Node n = inputElements.item(i);
                            NamedNodeMap m = n.getAttributes();
                            String inputName = m.getNamedItem("name").getTextContent();
                            if (inputName.equals("authenticity_token")) {
                                String token = m.getNamedItem("value").getTextContent();
                                System.out.print("AUTH TOKEN field value: "+ token);
                                return token;
                            }
                        }
                        return "";
                    }
                }
        );

我在文档doc = response.asXml():

上收到错误
[Fatal Error] :5:313: Element type "e.length" must be followed by either attribute specifications, ">" or "/>".

当然,我不是第一个想做这样事的人。知道为什么它不工作吗?

1 个答案:

答案 0 :(得分:0)

这不是您代码的直接答案,但是您是否考虑过使用NekoHTML

这是一个java库,可以完全按照您的要求进行操作,但不会有任何麻烦。