从XML到Perl哈希

问题描述:

给定一个XPATH如“// ELEMENT_NAME”我想拉所形成的结构拼合的XPath,说: -从XML到Perl哈希

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

...然后压平成哈希表: -

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

所以,基本上我去深,我可以到树上,当我不能去任何更深的我写的哈希值。

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

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

听起来像你知道如何找到element_name元素,所以我会从那里继续。


你想有没有子元素的元素

  1. 是的 ELEMENT_NAME元素后裔,
  2. 的名称和文本内容。

您可以使用下面的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; 
}