我的问题是我的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];
}
这正好解决了我所需要的问题。
所以,周末的作业是:
- 什么是节点类型?
- 什么是"文本节点",它与其他节点有何不同?
- 节点的"名称"one_answers"值"是什么,它们与"内容"有什么关系?
- node到底是什么?