—需要多个同名兄弟节点的值:xml::LibXML



我的问题是我的XML看起来像这样:

<A>
    <INIT>
        <wwn>myvalue1</wwn>
           .
           [one or more values]
           .
        <wwn>myvalue2</wwn>
    </INIT>
</A>

就是我需要的那些多个节点的值。总会有一个或更多的人,但我无法知道有多少。

我发现了使用findvalue()的困难方法,并且正如在几个地方记录的那样,多个节点的值将被连接起来,并通过findvalue()作为单个字符串值返回。

我的想法是使用findnodes,并为找到的每个节点获取该节点的值。听起来像个计划,因为我看到库中包含

$content = $node->nodeValue;

作为一个选项,文档表明这正是我所需要的。以下是我尝试过的:

for my $INIT ($A->findnodes('./INIT')) {
    foreach my $Wwn ($INIT->findnodes('./wwn')) {
        my $wwn = $Wwn->nodeValue;
    }
}

返回一个错误,告诉我$wwn没有初始化。我已经说明了$Wwn的值确实是字面值节点字符串

<wwn>myvalue1</wwn> .

如此接近,却又如此遥远。对于节点的每个值,我都需要写一条记录,所以我想使用foreach{},这样我就可以一次处理一个值。我认为我实际上没有发送'一个节点'到nodeValue,但我发送的东西它不认识。如果$INIT不是一个节点,那么它还能是什么呢?

感谢您的帮助。

遍历具有我需要的"值"的节点的方法是合理的,但我缺乏对节点的"名称"one_answers"值"的含义的理解。在确定nodeValue()对于我正在查看的节点类型没有意义之后,我尝试了textContent()。

foreach my $Wwn ($A->findnodes('./INIT/wwn')) {
    my $wwn = $Wwn->textContent();
    [do some stuff];
}

这正好解决了我所需要的问题。

所以,周末的作业是:

  1. 什么是节点类型?
  2. 什么是"文本节点",它与其他节点有何不同?
  3. 节点的"名称"one_answers"值"是什么,它们与"内容"有什么关系?
  4. node到底是什么?

相关内容

  • 没有找到相关文章

最新更新