Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell Hxt和解析可选元素_Haskell_Hxt - Fatal编程技术网

Haskell Hxt和解析可选元素

Haskell Hxt和解析可选元素,haskell,hxt,Haskell,Hxt,我正在尝试在以下xml片段中使用HXT解析可选元素: <ns9:accountBankingInfo> <key> <accountId>10</accountId> <bankingId>01</bankingId> </key> <bankingInfo> <description>Bigbank Co.</description>

我正在尝试在以下xml片段中使用HXT解析可选元素:

<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