1

给定一个 XPATH,例如 '//element_name' 我想提取结果结构,比如:-

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

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

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

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

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

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

4

1 回答 1

1

听起来您知道如何找到 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;
}
于 2013-02-01T21:17:02.813 回答