3

これはばかげた質問に違いありませんが、私は少し立ち往生しています:

私はあなたがここでサンプルを見ることができるXMLファイルを持っています:

<?xml version="1.0" encoding="utf-16"?>
<!DOCTYPE tmx SYSTEM "56.dtd">
<body>
<tu changedate="20130625T175037Z"">
  <tuv xml:lang="pt-pt">
    <prop type="x-context-pre">&lt;seg&gt;Some text.&lt;/seg&gt;</prop>
    <prop type="x-context-post">&lt;seg&gt;Other text.&lt;/seg&gt;</prop>
    <seg>The text I'm interested.</seg>
  </tuv>
  <tuv xml:lang="it">
    <seg>And it's translation in italian.</seg>
  </tuv>
 </tu> 

 .... followed by other <tu>'s
</body>

巨大なファイルなので、XML::Twig を使用して解析し、関心のある部分を取得しています。特に、seg のノード コンテンツと tu のノード属性に関心があります。

これまでに得たコードは次のとおりです。

use 5.010;

use strict;
use warnings;

use XML::Twig;



my $filename = 'filename.tmx';
my $out_filename = 'out.xml';
open my $out, '>', $out_filename;
binmode $out;

my $original_twig = new XML::Twig (pretty_print => 'nsgmls', twig_handlers => {tu =>   \&original_tu});
$original_twig->parsefile($filename);




sub original_tu {
    my($twig, $original_tu) = @_;
    my $original_seg = $original_tu-> first_child('./tuv/seg')->text;

}

Perl (または XML::Twig と言うべきか) は、私が持っていることを教えてくれます: 間違ったナビゲーション条件 './tuv/seg' ()

seg ノードのテキストにアクセスする方法を知っている人はいますか? まだ私にうんざりしていなければ、tu のノードの changedate 属性にアクセスする方法を教えてください。

どうもありがとうございました。

ダセン

4

3 に答える 3

2

そのノードと属性にアクセスする 1 つの方法を次に示します。

my $original_seg = $original_tu->first_child('tuv')->first_child('seg')->text;
my $date = $original_tu->att('changedate');
于 2013-08-06T13:52:22.847 に答える
1

で完全な XPath 式を使用することはできませんfirst_child。1 つの XPath ステップのみを使用できます (つまり、1 レベルしか下に移動できません)。

XPath 式を使用するには、次を使用する必要がありますfindnodes: my $original_seg = $original_tu->findnodes('./tuv/seg', 0)->text(これ,0は、ヒットの (潜在的な) リストの最初の要素を取得します。

属性にアクセスするには、次を使用します$original_tu->att( 'date')

于 2013-08-06T14:00:40.300 に答える
0

で使用される条件first_childは XPath を使用できません。詳細については、 https://metacpan.org/module/XML::Twig#condを参照してください。first_child子を返しますがseg、 の孫ですtu

代わりに使用できますfirst_descendant('seg')

属性にアクセスするには、$original_tu->att('changedate')メソッドを使用します。

于 2013-08-06T13:58:03.117 に答える