从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元素,所以我会从那里继续。
你想有没有子元素的元素
- 是的 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;
}