好吧,这是一个很基本的问题,但是我对Perl还不熟悉,而且我确实在任何地方都找不到答案,尽管我相信它会非常简单。
假设我有以下XML模式:

<root>
    <parentNode status="Good">
        <A>
            <B>
                <value><![CDATA[This is my value]]</value>
            </B>
        </A>
    </parentNode>
</root>

假设将有多个状态不同的parentnode。
我正在尝试编写一个脚本,该脚本将为我提供状态不是“好”的parentnodes的每个值节点的内容
使用以下代码,我成功地获得了正确的parentnodes:
my $parser = XML::LibXML->new();
my $tree = $parser->parse_file($xml_file);
my $root = $tree->getDocumentElement;
my @records = $root->findnodes("//parentNode");
foreach my $node (@records) {
    my $resultAtt = $node->getAttribute('status');
    next if $resultAtt ne "Good";

但当我尝试:
my $val = $node->findvalue("value");

我什么也得不到。
另外,我真的只是对“这是我的价值”部分感兴趣。当您读取该值时,cdata会影响它吗?

最佳答案

xpath必须是隐式的。
而不是使用:my $val = $node->findvalue("value");
你应该使用:$val = $node->findvalue('./A/B/value');
你应该成功:D
复制您的代码(并将CData固定为具有右尖括号)
并使用上面的代码片段:

$ ./test2.pl
Found the value: This is my value
$

08-06 21:31