2017-12-23 9 views
1

私は、サーバーからXML文書を要求し、そのデータをシステムにインポートするために解析するプロジェクトを行っています。私はRuby 2.4.3を使用しています。無効なXMLを解析する方法

私の問題は、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 
+0

誰かがこれを後で見つけた場合は、この正規表現を使って修正しています:/ \ * \ <(\d).*\>。* \ <\/(\1).*>。* /これは私の予想できない無効なSQLパターンで動作します。キャプチャされた両方のグループの "Thi"のために "3"をサブするだけです。 – user1977840

答えて

0

Nokogiri::HTMLを解析していたデータの例は、はるかに寛容です。それはいくつかの調整が必要ですが、それを解析することができます。

関連する問題