Perl 为什么可以';我用XML::LibXML中的XPath访问XML文件中的元素吗?

Perl 为什么可以';我用XML::LibXML中的XPath访问XML文件中的元素吗?,perl,xpath,libxml2,xml-libxml,Perl,Xpath,Libxml2,Xml Libxml,我有一个XML文件,其中一部分如下所示: <wave waveID="1"> <well wellID="1" wellName="A1"> <oneDataSet> <rawData>0.1123975676</rawData> </oneDataSet> </well> ... more wellID's and rawData continu

我有一个XML文件,其中一部分如下所示:

 <wave waveID="1">
    <well wellID="1" wellName="A1">
      <oneDataSet>
        <rawData>0.1123975676</rawData>
      </oneDataSet>
    </well>
    ... more wellID's and rawData continues here...

它现在没有打印任何内容,我想我的Xpath语句有问题。请您帮我修复它,或者您能告诉我如何排除xpath语句的故障吗?谢谢。

不要在循环中使用
findnodes
,而是使用:

以下是使用处理
@c
数组的一些其他简便方法:

$c[0]->toString;    # <rawData>0.1123975676</rawData>
$c[0]->nodeName;    # rawData
$c[0]->textContent; # 0.1123975676
$c[0]->toString;#0.1123975676
$c[0]->nodeName;#原始数据
$c[0]->textContent;#0.1123975676

如果'wave'元素位于名称空间中,那么'rawData'元素也位于名称空间中,因此您可能需要使用

foreach $nod (@n) {
    my @c = $xc->findnodes('descendant::ns:rawData', $nod);  #element inside the tree.
    print @c;
}

我不知道这个XML库,但我注意到
ns:
名称空间前缀。您在XPath上下文中声明了什么?XML文件是否有默认的命名空间声明?(在一个地方使用
ns:
而在另一个地方没有前缀可能是错误的。)谢谢Kevin,我在原来的问题中添加了名称空间行。我确实尝试过:“//ns:rawData”,正如您所建议的,但是得到了“error:xmlxpathcomiledeval:evaluation failed”对不起,我误读了您的注释,原始XML文件确实有名称空间声明
$c[0]->toString;    # <rawData>0.1123975676</rawData>
$c[0]->nodeName;    # rawData
$c[0]->textContent; # 0.1123975676
foreach $nod (@n) {
    my @c = $xc->findnodes('descendant::ns:rawData', $nod);  #element inside the tree.
    print @c;
}