给定XPATH,例如' // element_name'我想拉出结果,说: -
<element_name>
<tag1>value1</tag1>
<nested>
<tag2>value2</tag2>
</nested>
</element_name>
...然后将其展平为哈希: -
{ 'tag1' => 'value1',
'tag2' => 'value2'
}
所以,基本上我尽可能地深入到树中,当我无法深入时,我会写入哈希。
元素值始终是唯一的。如果由于某种原因他们不是,我不介意他们覆盖哈希。
这显然需要一些递归。但我的问题是哪个perl XML解析器是最好的实现这个?关于代码结构的任何指针也都很受欢迎。最终结果将是一个SQL语句,因此标签的唯一性。我无法直接导入XML,因为某些标签需要进一步处理。
答案 0 :(得分:1)
听起来你知道如何找到element_name元素,所以我将从那里开始。
您需要元素的名称和文字内容
您可以使用以下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;
}