2

我有一个文件,其中包含类似 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>、<->、&、; 等标签吗?等,只需检查有效的开始和结束标签,如 <HOST> </HOST> <VERSION> </VERSION> 和 <OUTPUT> </OUTPUT>。上面的文件应该返回说它的格式正确,因为所有有效的标签都有正确的开始和结束括号。

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

我的主要问题是我不知道描述我的问题的正确关键字,这就是为什么谷歌没有给我正确的结果。有人可以将我推向正确的方向。谢谢

4

2 回答 2

2

我能问一下有什么意义吗?您的输入文件不是 XML,并且您不想通过添加 CDATA 部分使其成为 XML。通过了解“某些”数据是否为 ​​XML,您可以获得什么?这不像您将能够在其上使用 XML 工具,或者 ypo 将能够将其作为 XML 交付。

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

于 2012-08-24T14:31:06.960 回答
1

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

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

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

完成之后,您的输入应该可以用于 XML 解析、验证等。如果您的输入可能包含 CDATA 部分,您将不得不做更多的事情,但这应该足以开始。

于 2012-08-24T13:13:13.683 回答