使用Perl验证psuedo xml文件



我有一个文件,它有类似xml的标记和一堆无效的xml数据,因此我无法在文件上使用像xmllint这样的普通xml验证器。我想忽略无效的xml数据,只检查文件的格式是否正确。

<?xml version="1.0" encoding="utf-8"?>
<HOST>
<VERSION>5</VERSION> 
<OUTPUT>
   bunch of text which also contains tags like  <SYSTEM> 
   more tags like <->   <temp>  & ; 
   some more text and numbers
 </OUTPUT>
</HOST>

在上面的例子中,我可以忽略像<system>、<->&等等,并且只检查有效的打开和关闭标签,例如<主机><主机><版本><VERSION>和<输出><输出>。上面的文件应该返回,说它的格式很好,因为所有有效的标签都有合适的左括号和右括号。

我可以创建自己的dtd/xsd吗??以查找我想要的标签,并使用Perl忽略其余的标签。

我的主要问题是,我不知道正确的关键词来描述我的问题,这就是为什么谷歌没有给我正确的结果。有人能把我推向正确的方向吗。感谢

我可以问一下有什么意义吗?您的输入文件不是XML,您不希望通过添加CDATA部分使其成为XML。知道"某些"数据是否是XML,您会得到什么?您不能在上面使用XML工具,或者ypo不能将其作为XML交付。

所以实际上,这种不验证并没有给你带来任何好处。那不是有点浪费时间吗?

您必须首先清理输入。一旦做到了这一点,就可以进行DTD、模式、正确的解析等等。

如果只是OUTPUT标签,你可以试试这个:

s/(<OUTPUT>)/$1<![CDATA[/;
s/(</OUTPUT>)/]]>$1/;

完成后,您的输入应该可以进行XML解析、验证等。如果您的输入可能包含CDATA部分,您将需要做更多的工作,但这应该足以开始。

最新更新