Как разобрать неверный XML
У меня есть проект, над которым я работаю, где я запрашиваю 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
1 ответ
Nokogiri::HTML
гораздо более разрешительный. Потребуются некоторые корректировки, но он может разобрать.