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

<track>
<cto>Valid_XML_HERE</cto>@Binary_Blob_of_Junk@<cto>(...)</cto>
</track>

环境是RHEL-5,这意味着Python 2.4、Perl或SED/AWK解决方案是可用的。
对如何清除垃圾有什么建议吗?

最佳答案

我借鉴了Birei检查树元素的建议,但提出了一个SED唯一的解决方案。如OP所示,<cto>标记恰好在一条连续的线上。然后,解决方案是分割这些行,使每个<cto>标记都在一个新行上——因此,还可以隔离新行上的垃圾二进制数据——然后简单地选择以<cto>标记开头的行。
<tracks></tracks>标记可以通过CAT简单地添加到新文件中。
以下是SED命令,我已经测试并确认可以工作。。。
第一步。将<cto>标记隔离到新行。

sed -i "s/<cto/\n<cto/g;s/<\/cto>/<\/cto>\n/g" ${FILE}

第二步。仅选择以<cto>标记开头的行。
sed -i "/<cto/p" ${FILE}

第三步。格式化新的XML文档。
xmllint --format "${FILE}" > foo.xml

谢谢你们各自的意见。

10-07 15:02