在Haskell中逐字复制XML输入到输出

Copying XML input to output verbatim in Haskell

提问人:Michael restore Monica Cellio 提问时间:5/29/2015 最后编辑:Michael restore Monica Cellio 更新时间:5/29/2015 访问量:103

问:

根据标题。该应用程序是用户编写的配置文件,可能必须不时地在某些部分进行更新,但其他方面应保持不变。起点只是为了能够将输入原封不动地传递到输出。

我接受输入和几乎是等效的,可能不会在输出中区分,但除此之外,我想尽可能多地保留 XML。<tag></tag><tag/>

第一次尝试是 Text.XML.HaXml.SAX.saxParse,但它在注释后抑制空格,例如:

<!-- next section: -->
<section>
    ...
</section>

解析为:

<!-- next section: --><section>
    ...
</section>

这是一个不可接受的变化。下一次尝试是在 http://pastebin.com/qNyVuBK7 时通过 HXT,除了属性数据中的实体被混淆之外,这效果很好;例如,

<view UID="&Label;" ifNotNull="&Term;">

成为

<view UID="&amp;Label;" ifNotNull="&amp;Term;">

即使正常文本数据中的实体被正确传递。谁能建议如何解决最后一个问题,或者实现目标的其他方法?

似乎 https://hackage.haskell.org/package/roundtrip-xml-0.2.0.0 可能会有所帮助,但我找不到任何关于如何使用它的文档。

XML Haskell 复制 相等性

评论

1赞 bheklilr 5/29/2015
您不想解决最后一个问题,该符号保留在 XML 中并被编码为 .任何 XML 解码器都会正确识别这一点。HXT实际上是在为您清理您的输入,因为您的输入一开始就不是有效的XML。我会保持这些不变。如果您担心它是“人类可读的”,那么不要使用 XML 作为配置格式,而是使用 YAML 或 JSON 或 INI 或除 XML 以外的任何格式,XML 被设计为计算机可读,而不是人类可读。&&amp;
0赞 Michael restore Monica Cellio 5/30/2015
我确实想解决最后一个问题。原始文件在属性值中包含一个实体,该属性值将由处理器扩展为实体的值。重写的文件将具有一个 & 号作为属性值,后跟一些字母,后跟一个分号。
0赞 bheklilr 5/30/2015
这会让你的XML文件不合规,只是说。同样,如果您要使用 HXT 或 HaXml 重新加载它,则该属性的文本将完全相同,您仍然可以对其进行处理。但是,它被存储在文件中,因为是 XML 的保留字符。这就像如果你想要一个这样的元素,由于额外的,这不会很好地解析,而是你会在XML文件中。"&Label;""&amp;Label;"&<test><</test><<test>&lt;</test>
0赞 bheklilr 5/30/2015
当有人试图将变量名称(假设此处替换)为 , , , , 时会发生什么?ltgtampaposquot
0赞 Michael restore Monica Cellio 5/30/2015
遗憾的是,我仍然不明白你的意思。例如,如果包含输入文件,则输出将是,我只是不明白 (1) 输入格式不正确/不合规,以及 (2) 输出等同于输入或输入的更正版本。<tag attr="&apos;"><tag attr="&amp;apos;">

答: 暂无答案