0

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

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

这是我需要的那些多个节点的值。总会有1个或更多,但我不知道有多少。

我发现很难使用 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 不是节点,那么它还能是什么?

非常感谢任何帮助。

4

1 回答 1

0

迭代具有我需要的“值”的节点的方法是合理的,但我对节点的“名称”和“值”的含义缺乏了解。在确定 nodeValue() 对我正在查看的节点类型没有意义后,我尝试了 textContent()。

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

这完全按照我的需要解决了问题。

所以,周末的作业是:

  1. 什么是节点类型?
  2. 什么是“文本节点”,它与其他节点有何不同?
  3. 什么是节点的“名称”和“价值”,它们与“内容”有何关系?
  4. 什么是节点,真的吗?
于 2014-03-28T20:54:00.383 回答