要するに、これが私が達成したいことです:
"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
ドキュメントが 3 つのa
要素 (感嘆符なし)"foo"
で構成されていることを示しています。"bar"
"baz"