xml -conduit: Как изменить документ? - PullRequest
0 голосов
/ 02 апреля 2020

Учебное пособие по xml (единственное из существующих и, возможно, единственная 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. Сообщество может использовать еще много примеров.

1 Ответ

0 голосов
/ 03 апреля 2020

Читая документ XML и записывая новый, сохраняя сходства, которые вы хотите, но различаясь в желаемых вами отношениях.

Скажем, у вас есть document:: Document. Если вы предпочитаете синтаксис записи линзам, вы можете найти решение, похожее на следующее. Чтобы быть справедливым, рефакторинг его в маленькие функции с описательными именами может сделать несколько более читабельным. Кроме того, вы можете использовать линзы, библиотеку небольших обобщенных c функций с неописуемыми именами, которые полезны именно для такого рода манипуляций с деревом DOM.

document{ documentRoot=
    (documentRoot document){ elementNodes=
        (documentRoot document
        & elementNodes
        & (\[head,NodeElement body]->
            [head,NodeElement body{elementNodes=
                [elementNodes body & last]
        }]))
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...