解析XML文档缺少封闭的父实体

时间:2015-02-15 07:38:43

标签: ruby xml nokogiri

我想处理一个缺少总体封闭实体的XML文档。 (是的,这是我给出的文件。不,我没有创建它。)例如:

<DeviceInfo>
  <Greeting>Crunchy bacon!</Greeting>
</DeviceInfo>
<InstantaneousDemand>
  <TimeStamp>0x1c722845</TimeStamp>
</InstantaneousDemand>
<InstantaneousDemand>
  <TimeStamp>0x1c72284a</TimeStamp>
</InstantaneousDemand>

当我使用Nokogiri的XML方法解析文件时,它(可预测地)只读取第一个实体:

>> doc = Nokogiri::XML(File.open("x.xml"))
>> doc.children.count
=> 1
doc.text
=> "\n  Crunchy bacon!\n"

可以将文件作为一个字符串读取并在整个事物周围包裹一个假的封闭实体,但这似乎很重要。是否有更好的方法让Nokogiri阅读所有实体?

1 个答案:

答案 0 :(得分:3)

您可以创建DocumentFragment而不是Document(特别是考虑到您的内容实际上文档片段):

▶ doc = Nokogiri::XML::DocumentFragment.parse File.read("x.xml")
#⇒ #<Nokogiri::XML::DocumentFragment:0x14efa38 name="#document-fragment" 
#    ...
#  #<Nokogiri::XML::Element:0x14ef68c name="InstantaneousDemand"
#    ...
▶ doc.children.count
#⇒ 6

希望它有所帮助。