首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从有效的XML标记外部删除垃圾信息?

如何从有效的XML标记外部删除垃圾信息?
EN

Stack Overflow用户
提问于 2012-12-11 06:23:07
回答 3查看 496关注 0票数 2

我有一系列由数据回放实用程序生成的XML文件。该实用程序生成格式正确的XML标记。不幸的是,这个实用程序并不完美。它试图序列化的一些Java对象失败了,它们被简单地插入(作为二进制blob)在这些其他有效的XML标记之间。

例如..。

代码语言:javascript
复制
<track>
<cto>Valid_XML_HERE</cto>@Binary_Blob_of_Junk@<cto>(...)</cto>
</track>

环境是RHEL-5,这意味着可以使用Python2.4、Perl或SED/AWK解决方案。

对如何删除垃圾有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-12 07:37:08

我基于Birei的建议来检查树元素,但是想出了一个仅适用于SED的解决方案。如操作中所示,<cto>标记恰好在一个连续的行上。然后,解决方案是拆分行,使得每个<cto>标记都在一个新的行上--因此,也将垃圾二进制数据隔离在新的行上--然后简单地选择以<cto>标记开始的行。

可以通过CAT将<tracks></tracks>标记简单地添加到新文件中。

以下是我测试过并确认有效的SED命令。

步骤1.隔离要在新行上的<cto>标记。

代码语言:javascript
复制
sed -i "s/<cto/\n<cto/g;s/<\/cto>/<\/cto>\n/g" ${FILE}

步骤2.只选择以<cto>标记开头的行。

代码语言:javascript
复制
sed -i "/<cto/p" ${FILE}

步骤3.格式化新的XML文档。

代码语言:javascript
复制
xmllint --format "${FILE}" > foo.xml

感谢你们各自的投入。

票数 2
EN

Stack Overflow用户

发布于 2012-12-11 07:04:43

使用XML::Twig解析器删除track标记文本的其他方法:

代码语言:javascript
复制
#!/usr/bin/env perl

use strict;
use warnings;
use XML::Twig;

my $twig = XML::Twig->new(
    twig_handlers => {
        track => sub {
            for my $t ( $_->children() ) { 
                if ( $t->is_text ) { 
                    $t->set_text( '' );
                }   
            }   
        }   
    },  
    pretty_print => 'indented',
)->parsefile( shift)->print;

使用您的文件作为第一个(也是唯一的)参数运行它:

代码语言:javascript
复制
perl script.pl xmlfile
票数 1
EN

Stack Overflow用户

发布于 2012-12-12 13:28:16

下面是Perl为您提供的快速解决方案。

代码语言:javascript
复制
#!/usr/bin/perl -Tw

use strict;
use warnings;
use English qw( -no_match_vars $INPUT_RECORD_SEPARATOR );

my $text = do { local $INPUT_RECORD_SEPARATOR = undef; <>; };

my @ctos = $text =~ m{<cto>( .+? )</cto>}xmsg;

if ( @ctos ) {

    printf '<track><cto>%s</cto></track>', join '</cto><cto>', @ctos;
}

print "\n";

你可以像这样通过管道传输你的曲目文本:

代码语言:javascript
复制
$:  cat track.txt | ./clean_track.pl 
<track><cto>Valid_XML_HERE</cto><cto>(...)</cto></track>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13810318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档