问题标签 [xml-conduit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 如何检查 Text.XML.Cursor 中节点的内容?
我有这个 XPath 与 xmllint 一起使用
现在我希望它在 Haskell 中完成。但是跟随(不完整的原始 XPath)根本不起作用。我头上有空列表错误。
xml - 在 Haskell 的 xml-conduit 中,如何创建节点?
我是 Haskell 初学者。我正在使用xml-conduit将一些 XML 转换为 HTML,如 Yesod 教程中所见。我有一些属性和一些内容,我想将它们制作成一个节点,以将其添加到现有的 XML 中。创建节点的最佳方法是什么?我试过打电话Node
,但它说它不在范围内。我可以使用NodeContent "content"
或 usingNodeElement (Element ... )
创建节点,但如何创建节点,同时提供元素和内容?
(Yesod 书建议使用 Hamlet,但我宁愿不涉及 Hamlet,因为我已经在使用 Blaze,并且不想学习和维护太多的模板语言。)
haskell - 使用 xml-conduit parseBytes 建立堆内存
我正在使用 xml-conduit 的流接口解析一些相当大的 XML 文件https://hackage.haskell.org/package/xml-conduit-1.8.0/docs/Text-XML-Stream-Parse.html#v:parseBytes但我看到了这种内存积累(这里是一个小测试文件):
顶级用户在哪里:
实际数据不应该占用那么多堆——如果我序列化并重新读取,驻留内存使用量是千字节而不是兆字节。
我设法通过以下方式重现此最小示例:
xml - xml-conduit:如何修改文档?
xml-conduit 教程(现存的唯一一个,也许是唯一一个带有教程的 Haskell XML 库)展示了如何创建或读取 XML 文档,但没有展示如何修改文档。我熟悉此类操作的唯一方法是使用 lxml/elementtree (python),它只能通过副作用(我知道)起作用。我怀疑这里有一种非常不同的方法。
假设我有一个简单的文档:
如何:
- 修改标题?
- 删除本文件的第一段?
- 将此文档的正文附加到另一个文档的正文中?
随意使用其他 Haskell 库提出和贡献解决方案。社区可以使用更多示例。
xml - 比较游标与管道 xml 解析
这是我正在解析的一些 xml——这是我第一次使用 xml、soap 或管道。
我只想保留记录在哪里ows_Category
和Weekly Report
不ows_Document
包含Spanish
。我的cursor
版本很容易工作。这个版本要复杂得多,但我最终通过这个问题conduit
的答案弄清楚了。
尽管这两种方法现在都有效,但我有几个问题。
- 该方法是否具有忽略名称空间
conduit
的等效方法?lax
concat
游标功能需要什么?查看类型,我们从根节点开始,生成并维护一个相关节点列表以考虑、filter
对它们进行map
ing、对它们进行 ing 等等。什么是另一层嵌套,为什么?- 该
conduit
版本需要助手(到处f
调用)和(给所有东西命名)——它们似乎非常必要,以至于我认为库会将它们作为实用程序提供,因为每个人都会一直需要它们。还是我在做傻事?force
ns
- 我最糟糕的问题是我原来需要
gliRspNS
命名空间GetListItemsResult
,listitems
即使在 xml 中它看起来应该只适用于GetListItemsResponse
. 这只是一个幸运的猜测让我通过了这个。命名空间是否应该继承下来,直到像这样被覆盖? - 关于
requireAttrRaw
:- 如果我们负责验证,我们不应该知道命名空间
Name
吗? - 为什么要
requireAttrRaw
送我们[Content]
而不是两个Maybe Content
,一个用于ContentText
和ContentEntity
? - 我们应该如何处理
ContentEntity
“For pass-through parsing”?
- 如果我们负责验证,我们不应该知道命名空间
最后,我通常从中获取 xml,Network.HTTP.Simple.httpLBS
而不是从文件中读取。有一种方法可以连接conduit
解析器Network.HTTP.Client.Conduit.httpLBS
以便它直接在流上运行,我对吗?
haskell - 为什么 runConduit 不发送所有数据?
这是我正在解析的一些xml:
我一直在试图弄清楚如何让管道解析器拒绝记录,除非ows_Category
它包含Weekly Report
并且ows_Document
不包含Spanish
. 起初,我使用一个虚拟值(在parseDoc'
下面)在解析后将它们过滤掉,但后来我意识到我应该能够使用Maybe
(在下面其他相同的情况parseDoc
下),以及用事件使用的层join
折叠我的Maybe
层tag'
基于名称或属性匹配失败的解析器。它可以编译,但行为很奇怪,显然甚至没有尝试将某些元素发送到解析器!这怎么可能?
输出——注意parseDoc
甚至没有发送一条记录(应该成功的记录,从 10.14 开始),而parseDoc'
行为符合预期:
当我尝试通过删除与 相关的所有内容来进一步简化时ows_Category
,突然parseDoc
工作正常,确立了这个想法的合理性?当我改为删除与 相关的所有内容时ows_Document
,问题仍然存在。
我怀疑我应该这样做requireAttrRaw
,但我无法理解它并且找不到文档/示例。
这是否与Applicative
- 现在我想起来了,它不应该基于检查价值观而失败,对吧?
更新
我从作者那里找到了该库先前版本的答案force "fail msg" $ return Nothing
,其中包括在类似情况下的有趣之处,但它放弃了所有解析,而不是仅仅使当前解析失败。
这个评论表明我需要抛出一个异常,并且在源代码中,他们使用类似的东西lift $ throwM $ XmlException "failed check" $ Just event
,但是就像这样force ... return Nothing
,这会杀死所有的解析,而不仅仅是当前的解析器。我也不知道怎么弄到手event
。
这是一个合并的拉取请求,声称已经解决了这个问题,但它没有讨论如何使用它,只是它是“微不足道的”:)
回答
明确回答:
或者,因为在这种情况下可以独立检查属性值:
但后者留下了以下问题requireAttrRaw
:
- 如果我们负责验证,我们不应该知道命名空间
Name
吗? - 为什么要
requireAttrRaw
送我们[Content]
而不是两个Maybe Content
,一个用于ContentText
和ContentEntity
? - 我们应该如何处理
ContentEntity
“For pass-through parsing”?