首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xml-conduit:如何修改文档?

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

Stack Overflow用户
提问于 2020-04-03 03:16:09
回答 2查看 85关注 0票数 0

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

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

代码语言:javascript
复制
<html>
    <head>
        <title>My <b>Title</b></title>
    </head>
    <body>
        <p>Paragraph 1.</p>
        <p>Paragraph 2.</p>
    </body>
</html>

如何:

  • 修改标题?
  • 将此文档正文中的第一段删除为另一个文档的正文?

您可以使用其他Haskell库提出和贡献解决方案。社区可以使用更多的例子。

EN

回答 2

Stack Overflow用户

发布于 2020-04-03 19:42:04

通过读取XML文档并编写一个新文档,保持所需的相似性,但在所需的方面有所不同。

假设你有一个document:: Document。如果您更喜欢记录语法而不是镜头,您可能会得到如下所示的解决方案。公平地说,将其重构为具有描述性名称的小函数可以使其更具可读性。或者,您也可以使用lenses,这是一个小的泛型函数库,具有无法描述的名称,对于这种DOM树操作非常有用。

代码语言:javascript
复制
document{ documentRoot=
    (documentRoot document){ elementNodes=
        (documentRoot document
        & elementNodes
        & (\[head,NodeElement body]->
            [head,NodeElement body{elementNodes=
                [elementNodes body & last]
        }]))
    })
}
票数 0
EN

Stack Overflow用户

发布于 2020-05-16 17:34:21

另一种方法。

代码语言:javascript
复制
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)

结果:

代码语言:javascript
复制
<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

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

https://stackoverflow.com/questions/60999355

复制
相关文章

相似问题

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