1

我有一个 XML 文档,它是一个 2003 电子表格 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父元素。

请记住,为了获得第 10 个Cell,您必须使用:eq(9),正如您在jQuery 的文档中看到的那样:

由于 JavaScript 数组使用从 0 开始的索引,因此这些选择器反映了这一事实。这就是 $('.myclass:eq(1)') 选择文档中类 myclass 的第二个元素而不是第一个元素的原因。

或者,您可以使用:nth-child(10)相同的结果,即:

使用基于 1 的索引以符合 CSS 规范。

于 2012-11-15T14:37:05.143 回答