日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了當文檔以小寫字母<!doctype開頭時,空手道HTML解析引發SaxException的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在嘗試運行一個對URL調用GET的空手道測試,但我發現當站點以小寫形式返回<!doctype聲明(在‘普通’HTML中完全可以接受)時,我認為空手道XML解析器會拋出致命的錯誤和警告。在我看來,空手道使用了一個XML解析器,所以嚴格地說,這可能是正確的行為,因為小寫doctype將中斷。然而,我找不到一種方法來繞過這個問題來實現有效的HTML。我試過不同的頭球之類的,但似乎無法擺脫這一點。

我已經包含了一個小測試,幸運的是google.com也返回了小寫聲明:

示例測試

Given url 'http://www.google.com'
When method GET
Then status 200

錯誤

[Fatal Error] :1:3: The markup in the document preceding the root element must be well-formed.
15:19:45.267 [main] WARN com.intuit.karate.FileUtils - parsing failed: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 3; The markup in the document preceding the root element must be well-formed.

<!doctype html><html .... blah

我下載了空手道源代碼,發現報告的警告:

FileUtils.java

public static String toPrettyString(String raw) {
    raw = StringUtils.trimToEmpty(raw);
    try {
        if (Script.isJson(raw)) {
            return JsonUtils.toPrettyJsonString(JsonUtils.toJsonDoc(raw));
        } else if (Script.isXml(raw)) {
            return XmlUtils.toString(XmlUtils.toXmlDoc(raw), true);
        }
    } catch (Exception e) {
        logger.warn("parsing failed: {}", e.getMessage());
    }
    return raw;
}

通過檢查返回文檔的第一個字符,檢查似乎是在JSON或XML之間進行:

Script.Java

public static final boolean isXml(String text) {
    return text.startsWith("<");
}

XmlUtils.Java

然后,我認為builder.parse失敗,因為它不是有效的XHTML,因為后面的注釋暗示將在遞歸調用中刪除<!doctype

public static Document toXmlDoc(String xml) {
    ...

    Document doc = builder.parse(is);
    if (dtdEntityResolver.dtdPresent) { // DOCTYPE present
        // the XML was not parsed, but I think it hangs at the root as a text node
        // so conversion to string and back has the effect of discarding the DOCTYPE !
        return toXmlDoc(toString(doc, false));

是否可以將此流量轉移為有效的HTML?

推薦答案

如果您查看日志,空手道還會告訴您,它已經將完整的響應(將在response變量中可用)保留為字符串–盡管它未能將其”類型轉換”為XML.順便說一下,您甚至在responseBytes中有一個字節數組。因此,現在由您來做任何您想做的事情,例如,理論上您可以找到一個”寬松”的HTML解析器,然后獲得一棵DOM樹或其他什么東西。

Given url 'http://www.google.com'
When method GET
Then status 200
* print response

有幾個提示,您可以嘗試對response進行字符串替換,然后嘗試將其類型轉換為XML,請參閱:https://github.com/intuit/karate#type-conversion

或者,您所要做的可能只是收集一些數據,而一些正常的正則表達式匹配可能會做到這一點,請參閱以下內容:

https://stackoverflow.com/a/53682733/143475

https://stackoverflow.com/a/50372295/143475

這篇關于當文檔以小寫字母&lt;!doctype開頭時,空手道HTML解析引發SaxException的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:html 字母 開頭 引發 文檔 空手道 解析
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定