首页 > 解决方案 > 如何编写带有特殊字符的 xml 代码(使用 R xml 包)

问题描述

我正在尝试编写特定程序需要的一些 xml 文件,并且在某些文本中写入“特殊字符”时遇到问题,因此程序会抛出错误。

如何将特殊字符(特别是“>”)写入标签的属性?

library(XML) 

xml <- xmlTree()
  xml$addTag("events", close=FALSE, attrs = c(PackageMinimumVersionRequired="1.3") )  
  
  # '>' is a special character that gets rewritten as '&gt;'
    xml$addTag("schedule", close=TRUE, 
                attrs = c(time = paste("2000-01-01/1 -> +6-0-0", sep='') ) )
xml$addTag('party', close=FALSE, attrs = c(number='1')) #just putting this in to show I have other nodes
xml$closeTag() # close party 
xml$closeTag() # close events
    
saveXML(xml, file = "testfile.xml", encoding = "UTF-8" )  
  

'time' 属性写为: time="2000-01-01/1 - > ; +6-0-0"

我相信应该使用这些方面的东西,但还没有找到解决办法......

xmlCDataNode()
# or 
xml$addCData 

第二个问题 - 我如何为每个标签缩进一个新行?
xml 标头有自己的一行,但除此之外,所有标签都会水平堆叠在同一行中。我希望每个新标签都换行(我正在使用 notepad++ 或其他编辑器查看代码)。

标签: rxmlspecial-characters

解决方案


某些字符,尤其是<and &,必须始终进行转义。如果您的库没有转义这些字符,则输出将不是格式正确的 XML,并且将无法使用。

其他字符,例如>"',需要在特定条件下进行转义,许多库会无条件地转义它们,因为这是最容易做到的事情,而且一旦您通过解析器将 XML 放入其中,无论如何都没有任何区别。如果你真的想>逃脱,你应该问自己为什么。仅仅是出于审美原因吗?如果下游软件依赖于未转义,那么下游软件就有缺陷——编写可供有缺陷的客户端使用的 XML 会占用大量 StackOverflow 流量,因此您手头有问题。


推荐阅读