Haskell:使用XML.Light查找元素

时间:2014-07-14 21:31:29

标签: xml haskell

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]

1 个答案:

答案 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鱼。