首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不区分大小写的标记是否与xml-导管匹配?

不区分大小写的标记是否与xml-导管匹配?
EN

Stack Overflow用户
提问于 2014-08-16 02:36:53
回答 2查看 109关注 0票数 1

使用xml-conduit执行不区分大小写的标记和属性名称匹配的最佳方法是什么

例如,考虑上的findNodes解析示例中的函数:

https://www.fpcomplete.com/school/starting-with-haskell/libraries-and-frameworks/text-manipulation/tagsoup

代码语言:javascript
复制
-- The data we're going to search for
findNodes :: Cursor -> [Cursor]
findNodes = element "span" >=> attributeIs "class" "sb_count" >=> child

(我已经修改了这一行,使其能够与Bing当前的页面结构一起工作。)

我的实验表明,elementattributeIs在匹配名称时不执行不区分大小写的比较.有什么简单的方法来改变这种状况吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-16 20:30:14

在匹配元素时,可以使用laxElement忽略大小写。它还将忽略名称空间。在checkName上编写一个包装器应该非常容易,它具有您要寻找的确切语义。

票数 1
EN

Stack Overflow用户

发布于 2014-08-16 04:42:13

我找到了一个解决办法.仍然对更清洁的解决方案感兴趣。

基本上,我们只是创建我们自己版本的Text.HTML.DOM,它在创建XML树之前修复标记事件流中的标记和属性名称。

函数eventConduit的开头如下:

代码语言:javascript
复制
eventConduit :: Monad m => Conduit S.ByteString m XT.Event
eventConduit =
    TS.tokenStream =$= go []
  where
    go stack = do
        mx <- await
        case fmap (entities . fmap' (decodeUtf8With lenientDecode)) mx of
            Nothing -> closeStack stack
...

我们将case fmap ...行更改为:

代码语言:javascript
复制
        case fmap (entities . fixNames . fmap' (decodeUtf8With lenientDecode)) mx of

其中fixNames被定义为:

代码语言:javascript
复制
fixNames :: TS.Token' Text -> TS.Token' Text
fixNames (TS.TagOpen x pairs b) = TS.TagOpen (T.toLower x) (map (T.toLower *** id) pairs) b
fixNames (TS.TagClose x)        = TS.TagClose (T.toLower x)
fixNames t                      = t

现在,我们只在elementattributeIs中使用小写名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25336453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档