如何使用HXT编辑XML文件中的特定元素?

马克·卡波夫

简而言之,这是我要完成的工作:

"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";没有感叹号)。

比克利尔

我并没有假装擅长HXT,也没有经常使用它,但是我已经通过一些实验获得了您想做的工作。如果有人对HXT有更多的经验,请随时提供更好的解决方案。

通过浏览HXT Wiki我发现了process*processTopDown等功能processChildren以及其他几个功能。这些似乎实际上是允许更改发生的原因。现在,我假设您的实际用例更加复杂,您可能只想选择特定级别的元素。我偶然发现的模式是processChildren和的HXT版本一起使用的whenControl.Monad因为它们不一样,所以不使用。基本上,我的第一个实现是

applic
    = processChildren
    $ flip when (isElem >>> hasName "foo")
        $ processChildren
        $ flip when (isElem >>> hasName "bar")
            $ processChildren
            $ flip when (isElem >>> hasName "baz")
                $ processChildren
                $ flip when (isElem >>> hasName "a")
                    $ processChildren
                $ flip when isText
                    $ changeText excl

这对我来说真的很丑,重复的太多了。因此,我将其抽象为更具可读性的内容:

-- Fixity is important here, must be right-associative.
infixr 5 />/
(/>/) :: ArrowXml a => String -> a XmlTree XmlTree -> a XmlTree XmlTree
name />/ action
    = processChildren
    $ action `when` (isElem >>> hasName name)

applic = "foo" />/ "bar" />/ "baz" />/ "a" />/
    processChildren (
        changeText excl `when` isText
    )

所有这些调用processChildren可能都是多余的,特别是如果您只是深入研究结构,但是它确实可以使用,并且不会修改a文件不同部分中的其他元素。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用FLWOR计算XML文件中的特定元素?

来自分类Dev

如何使用python编辑特定目录中XML文件的多个xml标记数据

来自分类Dev

使用HXT操纵XML

来自分类Dev

如何使用 C# 将元素插入格式不正确的 XML 文件中的特定节点?

来自分类Dev

如何在HXT中提取XML树的特定分支

来自分类Dev

使用Python解析xml文件中的特定元素

来自分类Dev

使用VB.NET从XML文件中删除特定元素

来自分类Dev

使用 xslt 在 xml 文件中查找特定元素

来自分类Dev

如何使用python编辑文件的特定列

来自分类Dev

如何使用XmlReader从XML中的特定子元素获取价值?

来自分类Dev

如何使用Python elementTree提取xml数据中的特定元素

来自分类Dev

如何批量/ python中编辑XML文件

来自分类Dev

如何批量/ python中编辑XML文件

来自分类Dev

如何在Python中编辑XML文件?

来自分类Dev

C#:如何在xml文件的多个记录中的特定位置添加xml元素

来自分类Dev

如何使用Powershell从XML文件中删除特定标签?

来自分类Dev

编辑XDocument中的特定元素

来自分类Dev

如何在R {XML}中编辑XML文件

来自分类Dev

使用Etree从XML中删除特定元素

来自分类Dev

使用PHP中的DOMDocument编辑XML元素的新属性

来自分类Dev

如何通过使用xpath使用libxml2从C ++中的xml文件中检索节点和特定元素字符串?

来自分类Dev

如何在xml文件中写入元素

来自分类Dev

使用XLST从xml文件中删除元素

来自分类Dev

使用 Python 删除 XML 文件中的元素

来自分类Dev

如何使用PHP从另一个PHP文件读取html文件中的特定元素

来自分类Dev

如何在Java中对XML文件进行较小的编辑

来自分类Dev

如何在perl中编辑XML文件的内容?

来自分类Dev

在Java中编辑XML文件

来自分类Dev

在php中编辑xml文件

Related 相关文章

  1. 1

    如何使用FLWOR计算XML文件中的特定元素?

  2. 2

    如何使用python编辑特定目录中XML文件的多个xml标记数据

  3. 3

    使用HXT操纵XML

  4. 4

    如何使用 C# 将元素插入格式不正确的 XML 文件中的特定节点?

  5. 5

    如何在HXT中提取XML树的特定分支

  6. 6

    使用Python解析xml文件中的特定元素

  7. 7

    使用VB.NET从XML文件中删除特定元素

  8. 8

    使用 xslt 在 xml 文件中查找特定元素

  9. 9

    如何使用python编辑文件的特定列

  10. 10

    如何使用XmlReader从XML中的特定子元素获取价值?

  11. 11

    如何使用Python elementTree提取xml数据中的特定元素

  12. 12

    如何批量/ python中编辑XML文件

  13. 13

    如何批量/ python中编辑XML文件

  14. 14

    如何在Python中编辑XML文件?

  15. 15

    C#:如何在xml文件的多个记录中的特定位置添加xml元素

  16. 16

    如何使用Powershell从XML文件中删除特定标签?

  17. 17

    编辑XDocument中的特定元素

  18. 18

    如何在R {XML}中编辑XML文件

  19. 19

    使用Etree从XML中删除特定元素

  20. 20

    使用PHP中的DOMDocument编辑XML元素的新属性

  21. 21

    如何通过使用xpath使用libxml2从C ++中的xml文件中检索节点和特定元素字符串?

  22. 22

    如何在xml文件中写入元素

  23. 23

    使用XLST从xml文件中删除元素

  24. 24

    使用 Python 删除 XML 文件中的元素

  25. 25

    如何使用PHP从另一个PHP文件读取html文件中的特定元素

  26. 26

    如何在Java中对XML文件进行较小的编辑

  27. 27

    如何在perl中编辑XML文件的内容?

  28. 28

    在Java中编辑XML文件

  29. 29

    在php中编辑xml文件

热门标签

归档