2010-12-06 8 views
0

LINQステートメントを使用してWebサイトからデータを抽出しようとしていますが、XMLは次の形式です。LINQを使用したXMLデータの抽出

<parent> 
    <p> 
    <b> 
     Title 
    </b> 
    </p> 
    <p> 
    blurb 
    </p> 
    <p> 
    <b> 
     As Of Date 
    </b> 
    </p> 
    <center> 
    <table> 
     <tr> 
     <th> 
      Header 
     </th> 
     </tr> 
     <tr> 
     <td> 
      Data 
     </td> 
     </tr> 
    </table> 
    </center> 
    <p> 
    <b> 
     As Of Date 
    </b> 
    </p> 
    <center> 
    <table> 
     <tr> 
     <th> 
      Header 
     </th> 
     </tr> 
     <tr> 
     <td> 
      Data 
     </td> 
     </tr> 
    </table> 
    </center> 
</p> 

私は日付やデータとして(データ行が何回か繰り返される)を取得したいと思います。また、テーブルと日付はドキュメントに数回表示されます(テーブルは日付からアクティブです)。

私は、次のLINQを使用して行を取得することができますが、どのように私は日

Dim l_PricesTable = From rows In l_Xml.Descendants("tr") _ 
        Where ((rows.Descendants("td") IsNot Nothing) AndAlso (rows.Descendants("td").Count >= 1)) _ 
          Select Data = rows.Descendants("td")(0).Value, 
          AsOfDate = ??? 

の時点では、私はそれがサードパーティの源であるとしてXMLを変更する方法がないのですか。日付だけでなくテーブルも含むXML要素はありません。すべてが1つの親ノードの下にあります。

私はC#とVB.Netに自信がありますので、解決策はOKです。

ご協力いただければ幸いです。

おかげ

デイブ

答えて

0

私は本当に面倒なやり方でこの問題を解決しましたが、他の答えが出てこないので、私が行ったことを投稿します。

Dim l_PricesTable = From rows In l_Xml.Descendants("tr") _ 
       Where ((rows.Descendants("td") IsNot Nothing) AndAlso (rows.Descendants("td").Count >= 1)) _ 
         Select Data = rows.Descendants("td")(0).Value, 
         AsOfDate = rows.Parent.Parent.ElementsBeforeSelf("p")(rows.Parent.Parent.ElementsBeforeSelf("p").Count - 1).Descendants("b").Value 
1

は、HTMLを解析するXMLライブラリを使用しないでください。構文は似ていますが、は同じではありません。 XHTMLはXML、HTMLはそうではありません。

上記のサンプルデータはXMLと互換性のあるHTMLなので、すべてのデータがそのように見える場合(imgのような非クローズタグは使用しないでください)、にスケートすることができます。

そして、あなたの上記のサンプルでは、​​「日現在の」文字列は、あなたが実際に取得したいのプレースホルダであると仮定すると:

Dim asOfDate = l_Xml.Elements("p")(2).Element("b").Value 

ただ、これは画面の本質脆性に苦しんでいることに注意してください掻き取り;設計がまったく変更された場合、プロセスは中断します。

+0

ありがとう、私はこれの脆弱性を認識しており、悲しいことに唯一の方法です。私はLINQを選んだのですが、これはきちんとしたウェブサイトだったので(頻繁に変更されることはありませんが、私はちょうどこれを呪っています)、文字列の繰り返しよりも簡単でした。悲しいことに、これはデータが繰り返されるにつれて問題を解決しません(私はこれをより明確にしました)。 – DJIDave

関連する問題