Haskell相当新鲜。我试图使用Text.XML.Light包解析以下XML。
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfInt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.chemspider.com/">
<int>395443</int>
</ArrayOfInt>
目前我只想抓住<int>
元素。我有以下代码:
parseServerResponse = map (findChild (unqual "int")) . onlyElems . parseXML
我将xml作为字符串传递。我尝试了各种各样的变化但没有成功。我回来的就是清单:[Nothing,Nothing]
答案 0 :(得分:3)
在我得到它之前,我必须自己运行你的例子。
xmlns="http://www.chemspider.com/"
为没有显式前缀的所有元素设置XML名称空间。
因此,<int>395443</int>
的限定名称不是unqual "int"
。相反,它是:QName {qName = "int", qURI = Just "http://www.chemspider.com/", qPrefix = Nothing}
试试这个:
parseServerResponse = String -> [Element]
parseServerResponse = filterElementsName (("int" ==) . qName) <=< onlyElems . parseXML
使用Control.Monad中的(<=<)
。那是一种“向后”的Kleisli鱼。