简而言之,这就是我想要完成的事情:
"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"
; 不带感叹号)组成。