1

'//element_name' などの XPATH を指定すると、結果の構造を取得したいと思います。たとえば、次のようにします。

<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 に答える