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

Parsing XML document missing enclosing parent entity

我想处理缺少总体封闭实体的 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 读取所有实体?

您可能会创建一个 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

希望对您有所帮助。