1

データをフェッチする必要がある 2003 スプレッドシート XML ドキュメントである XML ドキュメントがあります。問題は、セルのスタイルを設定すると、XML にデータがなくてもスタイルが適用された行が含まれることになることです。すべての行の 10 番目のセルにデータがある行だけのリストを返す必要があります。jQueryでこれを行うにはどうすればよいですか?

XML サンプル:

    <Worksheet ss:Name="Space">
  <Names>
   <NamedRange ss:Name="_FilterDatabase" ss:RefersTo="=Space!R1C1:R8C13"
    ss:Hidden="1"/>
  </Names>
  <Table ss:ExpandedColumnCount="13" ss:ExpandedRowCount="995" x:FullColumns="1"
   x:FullRows="1" ss:StyleID="s114" ss:DefaultColumnWidth="46.5">
   <Column ss:StyleID="s115" ss:AutoFitWidth="0"/>
   <Column ss:StyleID="s115" ss:AutoFitWidth="0" ss:Width="142.5"/>
   <Column ss:StyleID="s115" ss:AutoFitWidth="0" ss:Width="95.25"/>
   <Column ss:StyleID="s115" ss:AutoFitWidth="0" ss:Width="75.75"/>
   <Column ss:StyleID="s115" ss:AutoFitWidth="0" ss:Width="93"/>
   <Column ss:StyleID="s115" ss:AutoFitWidth="0" ss:Width="129"/>
   <Column ss:StyleID="s115" ss:AutoFitWidth="0" ss:Width="17.25"/>
   <Column ss:StyleID="s115" ss:AutoFitWidth="0" ss:Width="41.25"/>
   <Column ss:StyleID="s115" ss:Width="236.25"/>
   <Column ss:StyleID="s115" ss:AutoFitWidth="0" ss:Width="135.75"/>
   <Column ss:StyleID="s116" ss:Width="51.75"/>
   <Column ss:StyleID="s116" ss:Width="53.25"/>
   <Column ss:StyleID="s116" ss:Width="18.75"/>
   <Row ss:AutoFitHeight="0" ss:Height="63" ss:StyleID="s117">
    <Cell ss:StyleID="s87"><Data ss:Type="String">Name</Data><NamedCell
      ss:Name="_FilterDatabase"/><NamedCell ss:Name="Space.Name"/></Cell>
    <Cell ss:StyleID="s87"><Data ss:Type="String">CreatedBy</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s88"><Data ss:Type="String">CreatedOn</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s87"><Data ss:Type="String">Category</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s87"><Data ss:Type="String">FloorName</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s87"><Data ss:Type="String">Description</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s86"><Data ss:Type="String">ExtSystem</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s86"><Data ss:Type="String">ExtObject</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s86"><Data ss:Type="String">ExtIdentifier</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s87"><Data ss:Type="String">RoomTag</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s112"><Data ss:Type="String">UsableHeight</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s112"><Data ss:Type="String">GrossArea</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s195"><Data ss:Type="String">NetArea</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
   </Row>
   <Row>
    <Cell ss:StyleID="s125"><Data ss:Type="Number">100</Data><NamedCell
      ss:Name="_FilterDatabase"/><NamedCell ss:Name="Space.Name"/></Cell>
    <Cell ss:StyleID="s126"><Data ss:Type="String">.com</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s93"><Data ss:Type="DateTime">2012-11-01T11:05:28.000</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s119"><Data ss:Type="String">Undefined</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s120"><Data ss:Type="String">01 Main Level</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s99"><Data ss:Type="String">GATHER</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s121"><NamedCell ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s121"><NamedCell ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s121"><NamedCell ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s122"><Data ss:Type="String">100 - Gathering Room</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s123"><Data ss:Type="Number">52</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s123"><Data ss:Type="Number">1674.1096940375501</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
    <Cell ss:StyleID="s124"><Data ss:Type="String">n/a</Data><NamedCell
      ss:Name="_FilterDatabase"/></Cell>
   </Row>

これまでのところ、すべての行を返しますが、データを含むセルに対してフィルター処理されていないコード:

$(xml).find("Worksheet[ss\\:Name='Space'] Table Row")

検索の最後に .filter を適用しようとしましたが、フィルターを適用する方法がわかりません。助けていただければ幸いです。

4

1 に答える 1

2

次のようなものを試してください:

$(xml).find("Worksheet[ss\\:Name='Space'] Row")
    .find('Cell:eq(9)').not(':empty').parent();

要素に直接移動しCell、空の要素を削除して、それぞれのRow親を返します。

jQueryのドキュメントでわかるように、10番目を取得するにはCell、を使用する必要があることに注意してください。:eq(9)

JavaScript 配列は 0 ベースのインデックスを使用するため、これらのセレクターはその事実を反映しています。これが、 $('.myclass:eq(1)') がドキュメント内の最初の要素ではなく、クラス myclass を持つ 2 番目の要素を選択する理由です。

:nth-child(10)または、同じ結果に使用できます。これは次のとおりです。

CSS 仕様に準拠するために、1 から始まるインデックスを使用します。

于 2012-11-15T14:37:05.143 に答える