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

时间:2014-03-23 03:28:46

标签: xml-parsing 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 {},因此我可以一次处理一个值。我认为我实际上并没有发送节点&#39;到nodeValue,但我发送了一些它无法识别的东西。如果$ INIT不是一个节点,那还有什么呢?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

迭代具有&#39;值的节点的方法&#39;我需要的是声音,但我不了解节点的名称&#39;和&#39;价值&#39;意思。在确定nodeValue()对于我正在查看的节点类型没有意义之后,我尝试了textContent()。

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

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

所以,周末的作业是:

  1. 什么是节点类型?
  2. 什么是&#39;文字节点&#39;它和其他人有什么不同?
  3. 什么是节点&#39;名称&#39;和&#39;价值&#39;它们如何与“内容”相关?
  4. 什么是节点,真的吗?