将XML从XML平移到Perl哈希

时间:2013-02-01 20:53:04

标签: xml perl recursion

给定XPATH,例如' // element_name'我想拉出结果,说: -

<element_name>
   <tag1>value1</tag1>
   <nested>
     <tag2>value2</tag2>
   </nested>
</element_name>

...然后将其展平为哈希: -

{ 'tag1' => 'value1',
  'tag2' => 'value2'
}

所以,基本上我尽可能地深入到树中,当我无法深入时,我会写入哈希。

元素值始终是唯一的。如果由于某种原因他们不是,我不介意他们覆盖哈希。

这显然需要一些递归。但我的问题是哪个perl XML解析器是最好的实现这个?关于代码结构的任何指针也都很受欢迎。最终结果将是一个SQL语句,因此标签的唯一性。我无法直接导入XML,因为某些标签需要进一步处理。

1 个答案:

答案 0 :(得分:1)

听起来你知道如何找到element_name元素,所以我将从那里开始。


您需要元素的名称和文字内容

  1. element_name 元素的后代,
  2. 没有元素子女。
  3. 您可以使用以下XPath来查找这些节点:

    descendant::*[count(*)=0]
    

    替代:

    .//*[count(*)=0]
    

    使用XML :: LibXML,整个缺失的部分将如下所示:

    for my $tag_node ($element_node->findnodes('descendant::*[count(*)=0]')) {
        my $name = $tag_node->nodeName();
        my $text = $tag_node->textContent();
        $hash{$name} = $text;
    }