Haskell Hxt和解析可选元素
我正在尝试在以下xml片段中使用HXT解析可选元素:Haskell Hxt和解析可选元素,haskell,hxt,Haskell,Hxt,我正在尝试在以下xml片段中使用HXT解析可选元素: <ns9:accountBankingInfo> <key> <accountId>10</accountId> <bankingId>01</bankingId> </key> <bankingInfo> <description>Bigbank Co.</description>
<ns9:accountBankingInfo>
<key>
<accountId>10</accountId>
<bankingId>01</bankingId>
</key>
<bankingInfo>
<description>Bigbank Co.</description>
<eft>
<bankCode>222</bankCode>
<transit>111</transit>
<accountNumber>3333333</accountNumber>
</eft>
</bankingInfo>
<defaultType>ACCOUNT</defaultType> <!-- optional -->
</ns9:accountBankingInfo>
我正在解析accountBankingInfo元素,如下所示:
bankParser :: ArrowXml a => a XmlTree BankingInfo
bankParser = deep (isElem >>> hasLocalPart "accountBankingInfo") >>> proc x -> do
i <- getText <<< getChildren <<< deep (hasName "bankingId") -< x
d <- getText <<< getChildren <<< deep (hasName "description") -< x
b <- getText <<< getChildren <<< deep (hasName "bankCode") -< x
t <- getText <<< getChildren <<< deep (hasName "transit") -< x
a <- getText <<< getChildren <<< deep (hasName "accountNumber") -< x
g <- nc "defaultType" -< x
returnA -< BankingInfo i d b t a g
nc name = ifA (deep (hasName name)) (getChildren >>> getText >>> arr Just) (arr (const Nothing))
bankParser::arrowXMLA=>XmlTree银行信息
bankParser=deep(isElem>>>hasLocalPart“accountBankingInfo”)>>>proc x->do
我刚刚发现了带default的函数,并且能够让它像这样工作:
bankParser :: ArrowXml a => a XmlTree BankingInfo
bankParser = deep (isElem >>> hasLocalPart "accountBankingInfo") >>> proc x -> do
i <- getText <<< getChildren <<< deep (hasName "bankingId") -< x
d <- getText <<< getChildren <<< deep (hasName "description") -< x
b <- getText <<< getChildren <<< deep (hasName "bankCode") -< x
t <- getText <<< getChildren <<< deep (hasName "transit") -< x
a <- getText <<< getChildren <<< deep (hasName "accountNumber") -< x
g <- withDefault (arr Just <<< getText <<< getChildren <<< deep (hasName "defaultType")) Nothing -< x
returnA -< BankingInfo i d b t a g
bankParser::arrowXMLA=>XmlTree银行信息
bankParser=deep(isElem>>>hasLocalPart“accountBankingInfo”)>>>proc x->do
我等一下,是不是应该是nc“defaultType”
而不是nc“accountNumber”
?你说得对@Cactus,我错了,我更新了。。。原来的问题还存在,;不过,我确实找到了答案,谢谢。
bankParser :: ArrowXml a => a XmlTree BankingInfo
bankParser = deep (isElem >>> hasLocalPart "accountBankingInfo") >>> proc x -> do
i <- getText <<< getChildren <<< deep (hasName "bankingId") -< x
d <- getText <<< getChildren <<< deep (hasName "description") -< x
b <- getText <<< getChildren <<< deep (hasName "bankCode") -< x
t <- getText <<< getChildren <<< deep (hasName "transit") -< x
a <- getText <<< getChildren <<< deep (hasName "accountNumber") -< x
g <- withDefault (arr Just <<< getText <<< getChildren <<< deep (hasName "defaultType")) Nothing -< x
returnA -< BankingInfo i d b t a g