4

要するに、これが私が達成したいことです:

"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"

4

1 に答える 1