问题标签 [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.

0 投票
0 回答
71 浏览

haskell - 如何检查 Text.XML.Cursor 中节点的内容?

我有这个 XPath 与 xmllint 一起使用

现在我希望它在 Haskell 中完成。但是跟随(不完整的原始 XPath)根本不起作用。我头上有空列表错误。

0 投票
1 回答
131 浏览

xml - 在 Haskell 的 xml-conduit 中,如何创建节点?

我是 Haskell 初学者。我正在使用xml-conduit将一些 XML 转换为 HTML,如 Yesod 教程中所见。我有一些属性和一些内容,我想将它们制作成一个节点,以将其添加到现有的 XML 中。创建节点的最佳方法是什么?我试过打电话Node,但它说它不在范围内。我可以使用NodeContent "content"或 usingNodeElement (Element ... )创建节点,但如何创建节点,同时提供元素和内容?

(Yesod 书建议使用 Hamlet,但我宁愿不涉及 Hamlet,因为我已经在使用 Blaze,并且不想学习和维护太多的模板语言。)

0 投票
1 回答
40 浏览

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但我看到了这种内存积累(这里是一个小测试文件):

随着时间的推移堆使用

顶级用户在哪里:

堆责备

实际数据不应该占用那么多堆——如果我序列化并重新读取,驻留内存使用量是千字节而不是兆字节。

我设法通过以下方式重现此最小示例:

0 投票
2 回答
93 浏览

xml - xml-conduit:如何修改文档?

xml-conduit 教程(现存的唯一一个,也许是唯一一个带有教程的 Haskell XML 库)展示了如何创建或读取 XML 文档,但没有展示如何修改文档。我熟悉此类操作的唯一方法是使用 lxml/elementtree (python),它只能通过副作用(我知道)起作用。我怀疑这里有一种非常不同的方法。

假设我有一个简单的文档:

如何:
- 修改标题?
- 删除本文件的第一段?
- 将此文档的正文附加到另一个文档的正文中?

随意使用其他 Haskell 库提出和贡献解决方案。社区可以使用更多示例。

0 投票
0 回答
98 浏览

xml - 比较游标与管道 xml 解析

这是我正在解析的一些 xml——这是我第一次使用 xml、soap 或管道。

我只想保留记录在哪里ows_CategoryWeekly Reportows_Document包含Spanish。我的cursor版本很容易工作。这个版本要复杂得多,但我最终通过这个问题conduit的答案弄清楚了。

尽管这两种方法现在都有效,但我有几个问题。

  • 该方法是否具有忽略名称空间conduit的等效方法?lax
  • concat游标功能需要什么?查看类型,我们从根节点开始,生成并维护一个相关节点列表以考虑、filter对它们进行maping、对它们进行 ing 等等。什么是另一层嵌套,为什么?
  • conduit版本需要助手(到处f调用)和(给所有东西命名)——它们似乎非常必要,以至于我认为库会将它们作为实用程序提供,因为每个人都会一直需要它们。还是我在做傻事?forcens
  • 我最糟糕的问题是我原来需要gliRspNS命名空间GetListItemsResultlistitems即使在 xml 中它看起来应该只适用于GetListItemsResponse. 这只是一个幸运的猜测让我通过了这个。命名空间是否应该继承下来,直到像这样被覆盖?
  • 关于requireAttrRaw
    • 如果我们负责验证,我们不应该知道命名空间Name吗?
    • 为什么要requireAttrRaw送我们[Content]而不是两个Maybe Content,一个用于ContentTextContentEntity
    • 我们应该如何处理ContentEntity“For pass-through parsing”?

最后,我通常从中获取 xml,Network.HTTP.Simple.httpLBS而不是从文件中读取。有一种方法可以连接conduit解析器Network.HTTP.Client.Conduit.httpLBS以便它直接在流上运行,我对吗?

0 投票
1 回答
116 浏览

haskell - 为什么 runConduit 不发送所有数据?

这是我正在解析的一些xml:

我一直在试图弄清楚如何让管道解析器拒绝记录,除非ows_Category它包含Weekly Report并且ows_Document不包含Spanish. 起初,我使用一个虚拟值(在parseDoc'下面)在解析后将它们过滤掉,但后来我意识到我应该能够使用Maybe(在下面其他相同的情况parseDoc下),以及用事件使用的层join折叠我的Maybetag'基于名称或属性匹配失败的解析器。它可以编译,但行为很奇怪,显然甚至没有尝试将某些元素发送到解析器!这怎么可能?

输出——注意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,一个用于ContentTextContentEntity
  • 我们应该如何处理ContentEntity“For pass-through parsing”?