このような構造でテキストを更新する必要があります。<node><data key="attr">text</data></node>
haskellでHXTライブラリを使ってこれを行う方法はありますか?haskell xmlはHXTライブラリを使用してテキストを更新します
2
A
答えて
1
自然な答えはレンズライブラリです。私はhxt
にそれに関連したものがあるとは思わない。あなたは、レンズに精通していない場合でも、README https://github.com/fumieval/xml-lensでxml-conduit
(実際にはなく、導管)を使用していますxml-lens
がある例は、かなり簡単ですが、多分ビット演算-詰まっ。しかしここでは例の1つの密度の低いバージョンです。私たちは、輸入を必要とする
<?xml version="1.0" encoding="ISO-8859-1"?>
<books>
<book category="Textbooks">
<title>Learn You a Haskell for Great Good!</title>
<author year="2011">Miran Lipovaca</author>
<pages>360</pages>
</book>
<book category="Textbooks">
<title>Programming in Haskell</title>
<author year="2007">Graham Hutton</author>
<pages>200</pages>
</book>
</books>
:それはこのようなXMLで始まる
<pages>360 pages</pages>
に
<pages>360</pages>
を変更し、それへの「ページ」を追加することにより、ブックリストの各ページ番号を変更しますこれらのようなもの
>>> import Text.XML.Lens -- from the lens-xml package
>>> import Control.Lens -- from the lens package
>>> import Text.XML -- from the xml-conduit package
>>> import Data.Monoid ((<>))
>>> import qualified Data.Text as T
>>> import qualified Data.ByteString.Lazy.Char8 as BL
>>> :set -XOverloadedStrings -- for Text literals
まず、私は変更したいターゲットトラバーサルを定義します。
>>> let my_focus = root . el "books" ./ el "book" ./ el "pages" . text
はその後、私はover some_traversal some_function
>>> let my_transformation = over my_focus (<> " pages") -- i.e. apply (<> " pages") to
>>> :t my_transformation -- all the focused positions
my_transformation :: Document -> Document
を使用して、それの面で通常のHaskellの関数を定義するには、ドキュメントをお読みください。
>>> doc <- Text.XML.readFile def "book.xml"
>>> :t doc
doc :: Document
を変換してレンダリングします。
>>> BL.putStrLn $ renderLBS def (my_transformation doc)
<?xml version="1.0" encoding="UTF-8"?><books>
<book category="Textbooks">
<title>Learn You a Haskell for Great Good!</title>
<author year="2011">Miran Lipovaca</author>
<pages>360 pages</pages>
</book>
<book category="Textbooks">
<title>Programming in Haskell</title>
<author year="2007">Graham Hutton</author>
<pages>200 pages</pages>
</book>
</books>
これは、表面下で使用している派手な装置を考えると少し遅いかもしれませんが、明らかに狂気のように強力です。
関連する問題
- 1. numbusライブラリを使用してJWTトークンフィールドを更新します。
- 2. XQueryを使用してXMLノードを更新します。
- 3. Pythonを使用してxmlファイルを更新しますか?
- 4. linqをxmlに使用してxmlファイルを更新する
- 5. msbuildでxmlスクリプトを使用してxmlファイルを更新する
- 6. xmlstarletを使用してネームスペースを使用してXMLを更新する1.6.1
- 7. Haskell XHTライブラリを使用してCDATAをレンダリングする
- 8. Golang Oauth2ライブラリを使用してアクセストークンを更新する
- 9. HaskellでHXTにTextまたはByteStringを使用することはできますか?
- 10. HaskellライブラリLinearを使用して、どのようにベクトルをスケーリングしますか?
- 11. DOMXmlとXpathを使用してXMLエントリを更新する
- 12. Qt DOMを使用してXMLファイルを更新する
- 13. PowerShellを使用してXMLファイルを更新する
- 14. MSBuild.ExtensionPack.Xml.XmlFileを使用してXMLファイルを更新するUpdateElement
- 15. ボタンを使用してxmlファイルを更新する
- 16. vtd-xmlを使用して属性値を更新する
- 17. HaskellインタプリタをC++で書く(ghcまたはhugをライブラリとして使用)
- 18. 部屋の永続ライブラリを使用してパラメータを更新
- 19. LINQ to XMLを使用して要素を更新しますか?
- 20. XMLファイルのデータセット、データアダプタを使用して任意のデータソースを更新します。
- 21. 単純なフレームワークを使用してxmlファイルを更新します。
- 22. ノックアウト計算機能を使用してテキストを更新する
- 23. Word文書でPOIを使用してVisio図のテキストを更新します。
- 24. HaskellでNetwork.URLライブラリを使用する
- 25. Magento - 更新XMLを使用してブロックを削除
- 26. Haskell Turtleライブラリを使用してパスを印刷する方法は?
- 27. は、angular2でcryptojsライブラリを使用してテキストを暗号化します。
- 28. HTML5 localstorageを使用してdocument.writeを使用せずにテキストを更新する
- 29. jmeterを使用してXMLを更新して後で投稿する方法
- 30. xsltを使用してxmlのテキストを置き換えます。
こんにちは、こんにちは、stackoverflowへようこそ - これは、人々が質問に答え、お互いを無料で助けるプラットフォームです。だから誰かがそれに答えてくれると思うように**少なくともあなたの質問に**努力を払ってください**。あなたは試したこと、偉大な検索エンジンがあなたに語ったことを示すことができます。あなたが理解していないドキュメントや一般的にどこにいるのかを参照できます。今私があなたの努力に基づいて答えに入れようとしている努力は、「私はそれが可能だと思う」 – epsilonhalbe