尝试使用 Perl 查找/replcace char 实体 xml::d om::node->expandEntityRefs()



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

我想找到

<myelement>&#x25aa;</myelement>

并替换为

<myelement>&#x2022;</myelement>

我正在尝试使用xml :: dom :: node-> devententityrefs()函数,但没有任何运气。我基本上是在尝试这样做:

# $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 );

#从主软件包打电话时,我会收到一个错误:无法使用字符串(" xml :: dom :: node")作为数组参考/xml/dom.pm行1244。 我的$ test2 = xml :: dom :: node-> devententityrefs($ schildtext);

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

我必须承认我不是最好的回答的人,而且我不知道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编码。我敢肯定(?)必须有一种方法,或者更好地强迫它一直保持这种状态。有人吗?

最新更新