我想访问我检索到的节点列表的每个单元格的值:
$xc->registerNs('ns', 'urn:schemas-microsoft-com:office:spreadsheet');
foreach my $row ($xc->findnodes('/ns:Workbook/ns:Worksheet/ns:Table/ns:Row'))
他们有以下格式:
<Row>
<Cell><Data ss:Type="String">sbdsvrwm832</Data></Cell>
<Cell><Data ss:Type="String">3.0.6</Data></Cell>
<Cell><Data ss:Type="Number">5.0999999999999996</Data></Cell>
<Cell><Data ss:Type="String"/></Cell>
<Cell><Data ss:Type="String">NA</Data></Cell>
<Cell><Data ss:Type="String">NA</Data></Cell>
<Cell><Data ss:Type="String">N/A in SHV3</Data></Cell>
<Cell><Data ss:Type="String">YES</Data></Cell>
<Cell><Data ss:Type="String"/></Cell>
<Cell><Data ss:Type="String">YES</Data></Cell>
<Cell><Data ss:Type="String">2013-09-20</Data></Cell>
<Cell><Data ss:Type="String">NO</Data></Cell>
<Cell><Data ss:Type="String"/></Cell>
</Row><Row>
<Cell><Data ss:Type="String">sbtorsvr832</Data></Cell>
<Cell><Data ss:Type="String">4.0.1</Data></Cell>
<Cell><Data ss:Type="Number">3.011111111</Data></Cell>
<Cell><Data ss:Type="String"/></Cell>
<Cell><Data ss:Type="String">ORI</Data></Cell>
<Cell><Data ss:Type="String">NA</Data></Cell>
<Cell><Data ss:Type="String">N/A in SHV3</Data></Cell>
<Cell><Data ss:Type="String">YES</Data></Cell>
<Cell><Data ss:Type="String"/></Cell>
<Cell><Data ss:Type="String">YES</Data></Cell>
<Cell><Data ss:Type="String">2013-07-18</Data></Cell>
<Cell><Data ss:Type="String">NO</Data></Cell>
<Cell><Data ss:Type="String"/></Cell>
</Row>...
...
请注意,单元格/数据元素 NOT 具有可与XPath表达式一起使用的名称或ID(它们大多数是相同的元素,某些值可能为null或包含空格)。有没有办法可以按索引访问每个这样的行的任意单元格的数据?提前谢谢。
亚历
答案 0 :(得分:0)
您正在寻找的XPath表达式(相对于Row
元素)...
"Cell[position()=$i]/Data"
...其中$i
对应于您正在寻找的元素的索引(从1开始!)。
如果您需要检索 all 行的所有相同位置的项目,只需在//Row/
前加上该表达式(假设您要从根元素查询)。例如:
my @nodesOfColumn2 = $dom->findnodes('//Row/Cell[position()=2]/Data');
print $_->to_literal, "\n" for @nodesOfColumn2;
### prints...
### 3.0.6
### 4.0.1