Короче, вот что я хочу сделать:Как редактировать определенные элементы в файле XML с помощью HXT?
"foo.xml"
:
<?xml version="1.0"?>
<foo>
<bar>
<baz>
<a>foo</a>
<a>bar</a>
<a>baz</a>
</baz>
</bar>
</foo>
ожидаемый результат (содержание "bar.xml"
):
<?xml version="1.0"?>
<foo>
<bar>
<baz>
<a>foo!</a>
<a>bar!</a>
<a>baz!</a>
</baz>
</bar>
</foo>
... моя попытка приблизиться к проблема:
module Main (main) where
import Control.Monad
import Control.Arrow.ArrowTree
import Text.XML.HXT.Core
main :: IO()
main = void . runX $ readDocument [] "foo.xml" >>>
applic >>> writeDocument [withIndent yes] "bar.xml"
applic :: IOSArrow XmlTree XmlTree
applic = getChildren >>> hasName "foo"
-- ^^ because of extra root node (?)
/> hasName "bar" /> hasName "baz" /> hasName "a" >>> changeText excl
excl :: String -> String
excl = (++ "!")
Вопрос: Как редактировать только отдельные элементы без изменения/удаления их корневых элементов? Также обратите внимание, что эта программа не создает файл "bar.xml"
, поэтому что-то определенно неправильно. Трассировка показывает, что после применения applic
стрелка документ состоит из трех элементов a
("foo"
, "bar"
и "baz"
; без восклицательных знаков).
Я развею линзы? – AJFarmar
@AJFarmar, я думаю, это должно быть возможно обойтись без объектива. – Mark