ruby - 如何解析无效的 XML

标签 ruby xml mechanize mechanize-ruby

这个问题在这里已经有了答案:





How to parse invalid (bad / not well-formed) XML?

(4 个回答)


3年前关闭。




我有一个项目,我正在从服务器请求 XML 文档并解析它以将数据导入我的系统。我正在使用 Ruby 2.4.3。

我的问题是 XML 带有名称以数字开头的元素标签。 Nokogiri 将这些标签视为前一个标签内容的一部分,并在解析文档的其余部分时搞砸了。

我正在使用 Mechanize 请求数据。有什么想法要走哪条路?

我唯一能想到的就是在 Mechanize 中编写一个完全自定义的解析器,我宁愿不这样做。

我还考虑首先将 xml 解析为字符串以重命名这些元素,但不确定这是否是最简洁的方法。非常感谢任何建议。

这是我正在解析的数据的示例

<Rooms>\r
          <2ndBedroomArea>144</2ndBedroomArea>\r
          <2ndKitchenArea>144</2ndKitchenArea>\r
          <3rdBedroomArea>168</3rdBedroomArea>\r
          <4thBedroomArea>156</4thBedroomArea>\r
          <FamilyRoomArea>368</FamilyRoomArea>\r
          <FormalDiningRoomArea>144</FormalDiningRoomArea>\r
          <GreatRoomArea>0</GreatRoomArea>\r
          <InformalDiningRoomArea>187</InformalDiningRoomArea>\r
          <KitchenArea>168</KitchenArea>\r
          <LaundryRoomArea>84</LaundryRoomArea>\r
          <LivingRoomArea>272</LivingRoomArea>\r
          <MasterBedroomArea>238</MasterBedroomArea>\r
          <OfficeArea>144</OfficeArea>\r
          <RecreationRoomArea>0</RecreationRoomArea>\r
          <2ndBedroomDim>12 x 12</2ndBedroomDim>\r
          <2ndKitchenDim>12 x 12</2ndKitchenDim>\r
          <3rdBedroomDim>12 x 14</3rdBedroomDim>\r
          <4thBedroomDim>13 x 12</4thBedroomDim>\r
          <FamilyRoomDim>16 x 23</FamilyRoomDim>\r
          <FormalDiningRoomDim>12 x 12</FormalDiningRoomDim>\r
          <GreatRoomDim>0 x 0</GreatRoomDim>\r
          <InformalDiningRoomDim>17 x 11</InformalDiningRoomDim>\r
          <KitchenDim>14 x 12</KitchenDim>\r
          <LaundryRoomDim>6 x 14</LaundryRoomDim>\r
          <LivingRoomDim>17 x 16</LivingRoomDim>\r
          <MasterBedroomDim>17 x 14</MasterBedroomDim>\r
          <OfficeDim>12 x 12</OfficeDim>
          <RecreationRoomDim>0 x 0</RecreationRoomDim>\r
          <2ndBedroomLen>12</2ndBedroomLen>\r
          <2ndKitchenLen>12</2ndKitchenLen>\r
          <3rdBedroomLen>12</3rdBedroomLen>\r
          <4thBedroomLen>13</4thBedroomLen>\r
          <FamilyRoomLen>16</FamilyRoomLen>\r
          <FormalDiningRoomLen>12</FormalDiningRoomLen>\r
          <GreatRoomLen>0</GreatRoomLen>\r
          <InformalDiningRoomLen>17</InformalDiningRoomLen>\r
          <KitchenLen>14</KitchenLen>\r
          <LaundryRoomLen>6</LaundryRoomLen>\r
          <LivingRoomLen>17</LivingRoomLen>\r
          <MasterBedroomLen>17</MasterBedroomLen>\r
          <OfficeLen>12</OfficeLen>\r
          <RecreationRoomLen>0</RecreationRoomLen>\r
          <2ndBedroomWid>12</2ndBedroomWid>\r
          <2ndKitchenWid>12</2ndKitchenWid>\r
          <3rdBedroomWid>14</3rdBedroomWid>\r
          <4thBedroomWid>12</4thBedroomWid>\r
          <FamilyRoomWid>23</FamilyRoomWid>\r
          <FormalDiningRoomWid>12</FormalDiningRoomWid>\r
          <GreatRoomWid>0</GreatRoomWid>\r
          <InformalDiningRoomWid>11</InformalDiningRoomWid>\r
          <KitchenWid>12</KitchenWid>\r
          <LaundryRoomWid>14</LaundryRoomWid>\r
          <LivingRoomWid>16</LivingRoomWid>\r
          <MasterBedroomWid>14</MasterBedroomWid>\r
          <OfficeWid>12</OfficeWid>\r
          <RecreationRoomWid>0</RecreationRoomWid>\r
          <5thBedroomArea>0</5thBedroomArea>\r
          <5thBedroomDim>0 x 0</5thBedroomDim>\r
          <5thBedroomLen>0</5thBedroomLen>\r
          <5thBedroomWid>0</5thBedroomWid>\r
          <6thBedroomArea>0</6thBedroomArea>\r
          <6thBedroomDim>0 x 0</6thBedroomDim>\r
          <6thBedroomLen>0</6thBedroomLen>\r
          <6thBedroomWid>0</6thBedroomWid>\r
        </Rooms>\r

最佳答案

Nokogiri::HTML更宽容。它需要一些调整,但它可以解析它。

关于ruby - 如何解析无效的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47955866/

相关文章:

ruby - 有人知道一个好的 Ruby ePub 库吗?

xml - 在 XSD 中编写将出现在自动生成的 XML 中的注释?

ruby - 从 HTML 解析价格返回空白或没有值?

ruby - Ruby 中的分段文件上传

mysql - xml Hibernate 映射,具有复合 id 和不同列名的多对一

Python Mechanize 表单提交问题

ruby-on-rails - Rails : After putting devise routes in namespace, 模型名称以命名空间为前缀。如何删除它?

ruby-on-rails - Rails 合并多个 json 响应

ruby - 为什么 Ruby 模块包含排除了模块的单例类?

c# - 如何将 .xml 文件与 xmlns 属性一起反序列化?