我有與該clojure.data.xml一些問題解析XML不好時,拋出的異常沒有被捕獲。我發現了一些可能與運行時包裝有關的問題,但是我解開它的嘗試並未成功,任何人都可以向我指出爲什麼會發生這種情況?Clojure的異常處理
(defn parse-xml-from-string
"takes in valid xml as a string and turns it into
#clojure.data.xml data, if bad xml returns false"
[xml]
(try
(do (parse (java.io.StringReader. xml)))
(catch javax.xml.stream.XMLStreamException e false)
(catch Exception ex
(cond (isa? (class (.getCause ex)) javax.xml.stream.XMLStreamException) false))))
方法調用
(viva-api.helpers.validation/parse-xml-from-string "<?xml version=\"1.0\"encoding=\"UTF-8\"?><foo><bar><baz>The baz value</baz></bar></foos>")
輸出
#clojure.data.xml.Element{:tag :foo, :attrs {}, :content (user=> XMLStreamException ParseError at [row,col]:[1,84]
Message: The end-tag for element type "foo" must end with a '>' delimiter. com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next (XMLStreamReaderImpl.java:598)
你爲什麼試圖捕捉異常兩次?此外,(do)塊在內部只有一個表達式時不是必需的。編輯爲 –
以顯示輸入/輸出。兩次捕獲的原因是爲了展示我發現的可能解決方案。 – ChadJPetersen