我的问题是我的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 {},因此我可以一次处理一个值。我认为我实际上并没有发送节点&#39;到nodeValue,但我发送了一些它无法识别的东西。如果$ INIT不是一个节点,那还有什么呢?
非常感谢任何帮助。
答案 0 :(得分:0)
迭代具有&#39;值的节点的方法&#39;我需要的是声音,但我不了解节点的名称&#39;和&#39;价值&#39;意思。在确定nodeValue()对于我正在查看的节点类型没有意义之后,我尝试了textContent()。
foreach my $Wwn ($A->findnodes('./INIT/wwn')) {
my $wwn = $Wwn->textContent();
[do some stuff];
}
这完全解决了我需要的问题。
所以,周末的作业是: