0

我正在编写一个 perl 脚本来对 xml 文件进行一些更改,我需要做的一件事是找到一个实体并替换另一个。

我想找到

<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 行。我的 $test2 = XML::DOM::Node->expandEntityRefs( $sChildText );

关于我做错了什么的任何想法,或者解决这个问题的更好方法?谢谢,bp

4

1 回答 1

1

我必须承认我不是回答这个问题的最佳人选,而且我不知道 XML::DOM。就我个人而言,我会使用Mojo::DOM,但这只是因为它是我所知道的。此外,我仍在努力赶上 unicode 的东西。这里所说的都是我想出的:

#!/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 回答