xml - xml-conduit:如何修改文档?
问题描述
xml-conduit 教程(现存的唯一一个,也许是唯一一个带有教程的 Haskell XML 库)展示了如何创建或读取 XML 文档,但没有展示如何修改文档。我熟悉此类操作的唯一方法是使用 lxml/elementtree (python),它只能通过副作用(我知道)起作用。我怀疑这里有一种非常不同的方法。
假设我有一个简单的文档:
<html>
<head>
<title>My <b>Title</b></title>
</head>
<body>
<p>Paragraph 1.</p>
<p>Paragraph 2.</p>
</body>
</html>
如何:
- 修改标题?
- 删除本文件的第一段?
- 将此文档的正文附加到另一个文档的正文中?
随意使用其他 Haskell 库提出和贡献解决方案。社区可以使用更多示例。
解决方案
通过阅读 XML 文档并编写一个新文档,保持您想要的相似之处,但在您想要的方面有所不同。
假设你有一个document:: Document
. 如果您更喜欢记录语法而不是镜头,您可能会得到一个类似于以下的解决方案。公平地说,将其重构为具有描述性名称的小函数可以使其更具可读性。或者,您可以使用 Lens,这是一个小型通用函数库,其名称难以描述,对这种 DOM 树操作非常有用。
document{ documentRoot=
(documentRoot document){ elementNodes=
(documentRoot document
& elementNodes
& (\[head,NodeElement body]->
[head,NodeElement body{elementNodes=
[elementNodes body & last]
}]))
})
}
推荐阅读
- python - plotly dash不刷新
- flyway - 迁移脚本名称作为占位符?
- angular - 如何将两个角度数组与 ids 进行比较,如果它与第一个数组的 id 匹配,则给出第二个数组的输出
- javascript - 仅在状态更新时导航
- wpf - SciChart (C# WPF)。在 TextAnnotation 中绑定 Text 属性的问题
- arrays - 在 C 结构响应中动态分配数组不正确?
- php - PHP 异步多线程 Curl 应用程序
- reactjs - 在 BrowserRouter 更改后反应动态路由不起作用
- reactjs - 图像未在 React 中加载,也没有错误
- three.js - Threejs与不透明度混合