Xml Perl:如何访问相同同级的值

Xml Perl:如何访问相同同级的值,xml,perl,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">sbdsvr

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

$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>...
...
请注意,单元格/数据元素没有可以与XPath表达式一起使用的名称或ID。它们大多是相同的元素,有些值可能为null或包含空格。是否有一种方法可以通过索引访问任意单元格中每一行的数据?提前谢谢


Alex

您要查找的XPath表达式是相对于行元素的

"Cell[position()=$i]/Data"
。。。其中$i对应于基于1的索引!你要找的元素的

如果需要检索所有行具有相同位置的所有项,只要在该表达式前面加上//Row/就可以了,假设您是从根元素进行查询的。例如:

my @nodesOfColumn2 = $dom->findnodes('//Row/Cell[position()=2]/Data');
print $_->to_literal, "\n" for @nodesOfColumn2;
### prints... 
### 3.0.6
### 4.0.1 

不太清楚你的意思是什么,因为你已经在你的每个收藏行。不过,有一个名为position的XPath函数可能会派上用场。我想访问每行任意单元格列中的数据。你的建议很有趣。请举例说明如何使用position函数处理此$row?谢谢