据我所知,与 XML AST 重构相比,普通 HXT 似乎更适合对 XML 的查询。但是,其中一个 HXT 模块Data.Tree.NTree.Zippers.TypeDefs
似乎具有一些用于深入文档并进行本地工作的机制,而不是更全局的箭头。但是,我似乎无法得到任何工作。这是我之前的 HXT 问题的后续帖子- 所有代码都是相同的,除了现在trans
替换this
.
这是我的程序的入口点:
start :: App -> IO [XmlTree]
start (App src dest) = runX $
readDocument [
--... some settings ...
]
src
>>>
trans
>>>
writeDocument [
--... some settings ...
]
dest
这trans
是定义的模块:
module Main.Internal where
import Data.Maybe (fromJust)
import Text.XML.HXT.DOM.XmlNode (mkText')
import Text.XML.HXT.Core hiding (addToTheRight)
import Data.Tree.NTree.Zipper.TypeDefs
trans :: IOSLA (XIOState s) XmlTree XmlTree
trans = arrL go
where
go :: XmlTree -> [XmlTree]
go x = [fromNTZipper . manip . toNTZipper $ x]
unList :: [a] -> a
unList [] = error "dun goofed!"
unList (x:_) = x
manip = fromJust . (addToTheRight $ mkText' "bar")
. fromJust . down
最后,这是我的输入文件:
<html>
<head>
<title>foo</title>
</head>
<body>
<h1>foo</h1>
</body>
</html>
和我的输出:
<?xml version="1.0" encoding="US-ASCII"?>
<html>
<head>
<title>foo</title>
</head>
<body>
<h1>foo</h1>
</body>
</html>
那么,为什么在我的输出中找不到“bar”?它不应该在之后出现</html>
吗?再次,任何帮助都会很棒:)