0

我正在使用 Ruby 1.9.3 和 REXML 来解析 XML 文档,进行一些更改(添加/减少),然后重新输出文件。在这个文件中有一个如下所示的块:

<someElement>
  some.namespace.something1=somevalue1
  some.namespace.something2=somevalue2
  some.namespace.something3=somevalue3
</someElement>

问题是在重写文件后,这个块总是看起来像这样:

<someElement>
  some.namespace.something1=somevalue1
  some.namespace.something2=somevalue2 some.namespace.something3=somevalue3
</someElement>

第二个值之后的换行符(但绝不是第一个值!)已经丢失并变成了一个空格。稍后,我无法控制或影响的其他一些代码将读取此文件并根据这些换行符正确解析内容。一般来说,在这种情况下,我会使用 CDATA 来保留空格,但这不是一个选项,因为稍后解析此数据的代码并不期待 - 必须完全保留此元素的内部文本原样.

我的读/写代码如下所示:

xmlFile = File.open(myFile)
contents = xmlFile.read
xmlDoc = REXML::Document.new(contents, { :respect_whitespace => :all })
xmlFile.close

{perform some tasks}

out = ""
xmlDoc.write(out, 2)
File.open(filePath, "w"){|file| file.puts(out)}

我正在寻找一种在使用 REXML 以这种方式读取/写入文件时保留元素之间文本空白的方法。我已经在 stackoverflow 上阅读了有关此主题的许多其他问题,但没有一个可以完全复制这种情况。欢迎任何想法或建议。

4

1 回答 1

1

indent我通过删除(第二个)参数来获得正确的行为Document.write()

#xmlDoc.write(out, 2)
xmlDoc.write(out)

Document.write()根据我对文档的阅读,这似乎是一个错误,但如果你真的不需要设置缩进,那么关闭它应该可以解决你的问题。

于 2013-04-10T21:08:26.790 回答