Perl:如何访问相同兄弟姐妹的值

时间:2013-09-22 20:30:51

标签: xml perl

我想访问我检索到的节点列表的每个单元格的值:

$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或包含空格)。有没有办法可以按索引访问每个这样的行的任意单元格的数据?提前谢谢。

亚历

1 个答案:

答案 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