0

xml ファイルに変更を加えるための perl スクリプトを作成しています。必要なことの 1 つは、あるエンティティを見つけて別のエンティティを置き換えることです。

見つけたい

<myelement>&#x25aa;</myelement>

と置き換えます

<myelement>&#x2022;</myelement>

XML::DOM::Node->expandEntityRefs() 関数を使用しようとしていますが、運がありません。私は基本的に次のようにしようとしています:

# $nodeMyElement declared at top of function, not shown
my $textNode = $nodeMyElement->getFirstChild();

my $sChildText = $textNode ->toString();
# when calling from main node, the string is just nothing
my $test = $nodeMyElement ->expandEntityRefs( $sChildText );

# メイン パッケージから呼び出すとエラーが発生する: Can't use string ("XML::DOM::Node") as an ARRAY ref while "strict refs" in use at C:/Perl/site/lib/XML/ DOM.pm 1244 行目。 my $test2 = XML::DOM::Node->expandEntityRefs( $sChildText );

私が間違っていること、またはこの問題に対するより良いアプローチに関するアイデアはありますか? ありがとう、bp

4

1 に答える 1

1

私はこれに答えるのに最適な人物ではないことを認めなければなりません。さらに、私は XML::DOM についても知りません。個人的にはMojo::DOMを使用しますが、それは私が知っているからです。また、私はまだユニコードに追いつこうとしています。ここで言ったことはすべて、私が思いついたものです:

#!/usr/bin/env perl

use strict;
use warnings;

use v5.10;
use utf8::all;
use Mojo::DOM;

my $dom = Mojo::DOM->new->xml(1)->parse(<<'END');
<myelement>&#x25aa;</myelement>
END

$dom->find('myelement')
    ->grep(qr/\x{25aa}/)
    ->pluck(replace_content => "\x{2022}");

say $dom;

&#x問題は、エンコーディングに戻れないように見えることです。私は確信しています (?) それを行う方法、またはおそらくより良い方法で、常にその状態を維持する方法があるに違いありません。誰?

于 2012-10-22T16:35:06.120 に答える