1

我目前正在做一些 XML 解析,我选择使用 Hpricot 是因为它易于使用和语法,但是我遇到了一些问题。我需要将我发现的一段 XML 数据写入另一个文件。但是,当我这样做时,格式不会被保留。例如,如果内容应如下所示:

<dict>
  <key>item1</key><value>12345</value>
  <key>item2</key><value>67890</value>
  <key>item3</key><value>23456</value>
</dict>

并假设文档中有很多这样的条目。我正在通过使用迭代“dict”项目

hpricot_element = Hpricot(xml_document_body)
f = File.new('some_new_file.xml')
(hpricot_element/:dict).each { |dict| f.write( dict.to_original_html ) }


使用上面的代码后,我希望输出如下所示,与上面显示的 XML 完全相同。然而令我惊讶的是,文件的输出看起来更像这样:

<dict>\n", "    <key>item1</key><value>12345</value>\n", "    <key>item2</key><value>67890</value>\n", "    <key>item3</key><value>23456</value\n", "  </dict>


我尝试在“\n”字符处拆分并一次写入文件一行,但这似乎也不起作用,因为它无法识别“\n”字符。任何帮助是极大的赞赏。这可能是一个非常简单的解决方案,但我很难找到它。谢谢!

4

2 回答 2

0
hpricot_element = Hpricot::XML(xml_document_body)

File.open('some_new_file.xml', 'w') {|f| f.write xml_document_body }

如果要编写原始 xml,请不要使用 xml 解析器。这是不必要的。但是,如果您想进一步处理数据,您仍然应该使用一个。

此外,对于 XML,您应该使用Hpricot::XML而不仅仅是Hpricot.

于 2010-06-02T23:49:53.750 回答
0

我的解决方案是用换行符替换文字 '\n' 字符,并通过简单地添加两个如下所示的 gsub 来删除额外的标点符号:

f.write( dict.to_original_html.gsub('\n', "\n").gsub('" ,"', '') )


我不知道为什么我以前没有看到这个。就像我说的,这可能是一个我没有看到的简单答案,结果就是这样。感谢所有的答案!

于 2010-06-03T13:28:29.727 回答