给出一个示例xml文件:
<root>
<tag attr="value">Content</tag>
<tag attr="value2">Content</tag>
</root>
如何用不同的标签替换每个tag
,以便获得不同的文件:
<root>
<tag2 attr2="value"/>
<tag2 attr2="value2"/>
</root>
文档[1]似乎使用过滤器,有没有办法用箭头来完成这个?
我现在可以替换这样的节点:
runX $ readDocument [] "in.xml"
>>> processTopDown(
(eelem "tag2" += sattr "attr2" "XXX" )
`when` (isElem >>> hasName "tag") )
>>> writeDocument [] "test.xml"
但我不知道如何使属性正确。
[1] http://www.haskell.org/haskellwiki/HXT#Transform_external_references_into_absolute_reference
答案 0 :(得分:2)
从Text.XML.HXT.XmlArrow
尝试setElemName
,processAttrl
和changeAttrName
:
runX $ readDocument [] "in.xml" >>> transform >>> writeDocument [] "test.xml"
where
transform = processTopDown $
( setElemName (mkName "tag2") >>>
processAttrl (changeAttrName $ mkName . attrMap . localPart)
) `when` (isElem >>> hasName "tag")
attrMap "attr" = "attr2"
attrMap a = a
这适用于我的样本文档。