perl - 为什么我无法使用 XML::LibXML 中的 XPath 访问 XML 文件内的元素?

标签 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 continues here...

我尝试使用 Perl 的 libXML 解析该文件,并使用以下命令输出 wellName 和 rawData:

    use XML::LibXML;
    my $parser = XML::LibXML->new();
    my $doc = $parser->parse_file('/Users/johncumbers/Temp/1_12-18-09-111823.orig.xml');
    my $xc = XML::LibXML::XPathContext->new( $doc->documentElement()  );
    $xc->registerNs('ns', 'http://moleculardevices.com/microplateML');

            my @n = $xc->findnodes('//ns:wave[@waveID="1"]');   #xc is xpathContent
        # should find a tree from the node representing everything beneath the waveID 1
        foreach $nod (@n) {
            my @c = $nod->findnodes('//rawData');  #element inside the tree.
            print @c;
        }

它现在没有打印出任何内容,我认为我的 Xpath 语句有问题。请您帮我解决这个问题,或者您可以告诉我如何解决 xpath 语句的问题吗?谢谢。

最佳答案

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

my @c = $nod->getElementsByTagName('rawData');

以下是对 @c 数组进行处理的其他一些便捷方法:

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

关于perl - 为什么我无法使用 XML::LibXML 中的 XPath 访问 XML 文件内的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2079668/

相关文章:

arrays - 如何在 Perl 中正确传递引用和嵌套引用

珀尔。如何使输出在几秒钟后消失?

c++ - XPath 表达式失败。 (C 中的 libxml2)

java - java合并xml文件

java - 在 Java 中选择节点列表的 XPath

c++ - 如何使用 libxml2 验证带有 1.1 版模式的 xml?

html - libxml2 无法正确处理 HTML 中的 CDATA

ruby-on-rails - 错误 - "gem install rails"- 缺少 libxml2

css - Perl Mojo::DOM 修改属性值

windows - Perl 的/m 正则表达式修饰符在 Windows 上是否匹配不同?