xml-conduit tutorial (现有的惟一一个,也可能是唯一一个带有教程的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库提出和贡献解决方案。社区可以使用更多的例子。
发布于 2020-04-03 19:42:04
通过读取XML文档并编写一个新文档,保持所需的相似性,但在所需的方面有所不同。
假设你有一个document:: Document。如果您更喜欢记录语法而不是镜头,您可能会得到如下所示的解决方案。公平地说,将其重构为具有描述性名称的小函数可以使其更具可读性。或者,您也可以使用lenses,这是一个小的泛型函数库,具有无法描述的名称,对于这种DOM树操作非常有用。
document{ documentRoot=
(documentRoot document){ elementNodes=
(documentRoot document
& elementNodes
& (\[head,NodeElement body]->
[head,NodeElement body{elementNodes=
[elementNodes body & last]
}]))
})
}发布于 2020-05-16 17:34:21
另一种方法。
from simplified_scrapy import SimplifiedDoc
html = '''<html>
<head>
<title>My <b>Title</b></title>
</head>
<body>
<p>Paragraph 1.</p>
<p>Paragraph 2.</p>
</body>
</html>'''
doc = SimplifiedDoc(html)
title = doc.title
title.setContent('Modify <b>Title</b>')
firstP = doc.body.p
firstP.repleaceSelf("")
p = doc.p
p.insertAfter(p.outerHtml)
print (doc.html)结果:
<html>
<head>
<title>Modify <b>Title</b></title>
</head>
<body>
<p>Paragraph 2.</p><p>Paragraph 2.</p>
</body>
</html>这里有更多的例子:https://github.com/yiyedata/simplified-scrapy-demo/tree/master/doc_examples
https://stackoverflow.com/questions/60999355
复制相似问题