加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

从XML标记中删除空格

发布时间:2020-12-16 22:54:54 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个从 XML标记中删除空格的perl脚本,但在值内留下空格.例如,假设我有: ExampleThis is an example./Exampl e 我想要完成的是在 / Exampl e中专门敲掉空白.由于这将处理整个XML文档,我想我会使用替换运算符做一些事情,但我无法弄清楚如何只匹
我正在尝试编写一个从 XML标记中删除空格的perl脚本,但在值内留下空格.例如,假设我有:

<Example>This is an example.</Exampl   e>

我想要完成的是在< / Exampl e>中专门敲掉空白.由于这将处理整个XML文档,我想我会使用替换运算符做一些事情,但我无法弄清楚如何只匹配可能在XML标记本身内部的空格.

任何帮助是极大的赞赏!

编辑:我添加了一个真实的例子:

not well-formed (invalid token) at line 42,column 25,byte 1456:
                    <Artist>Eminem</Artist>
                    <FileName>eminem feat lil wayne - no love -
hotnewhiphop com(2).mp3</    FileName>
========================^
                    <FileSize>4804478</FileSize>

解决方法

s!(</?w+)s+(w+s+/?>)!$1$2!g;

如果要在带有属性的标记中实际留下空格,则会变得更复杂,因为空格是标记中的合法字符.你几乎必须在他们之后找到没有等于或等于空格的“单词”并将它们与之前的 – 未加引号的单词结合起来.

sub marry_inner_splits {
    my $_ = shift;
    # fix broken tags
    s|^/?(w+)s+(w+)b(?!s*=)|$1$2|; 
    # find the resulting position.
    my $pos = index( $_,' ' );
    # return if there is no whitespace.
    return $_ if $pos == -1;
    # bind the rest of the text to the substring
    substr( $_,$pos ) =~ s/(s*w+)s+(w+s*=s*(?:"[^"]+"|'[^']+')s*)/$1$2/g;
    return $_;
}

my $tag_str = q{Some stuff before the tag <ta g attr1="val1" att   r2="value #2"     /></Escap   e>};
$tag_str =~ s/<([^>]+)>/'<' . marry_inner_splits($1) . '>'/ge;

e标志表示您在更换部件中* eval * -ing.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读