删除XML标记及其内容之间的任何内容

我需要删除XML标记之间的任何内容,尤其是空格和换行符。

例如,从以下位置删除空格和新闻线:
\ n

要得到:

这不是为了手工解析XML ,而是在XML数据被工具解析之前准备好。 更具体地说,我正在使用Hpricot(Ruby)来解析XML,不幸的是我们目前仍然停留在0.6.164版本上,所以……我不知道更新的版本,但是这个版本经常会返回奇怪的节点(对象)只包含空格和换行符。 因此,我们的想法是在将XML转换为Hpricot文档之前清理它。 备选解决方案赞赏

测试的一个例子:NoMethodError:未定义的方法`children’代表“\ n”:Hpricot :: Text
这里有趣的部分不是NoMethodError,因为那很好,但是Hpricot :: Text元素只包含一个换行符,仅此而已。

请不要使用正则表达式来解析XML。 这非常容易出错。

使用适当的XML库,这将使这一点变得微不足道。 几乎所有可以要求的编程平台都有XML库 – 没有理由为XML使用正则表达式。

解决方案是选择所有“空白”文本节点并将其删除。

doc = Nokogiri(xml_source) doc.xpath('//text()[not(normalize-space())]').remove 

使用正则表达式解析XML通常不是一个好主意。 XML的一个主要优点是,对于您可能想要的任何语言/框架,有许多经过良好测试的解析器。 XML中有一些棘手的规则阻止任何正则表达式能够正确解析XML。

那说,像:

 s/>.*? 

(即perl语法)可能会做你想要的。 这就是说,从大于小于大于小的东西,取出任何东西,并将其剥离。 最后的“g”表示根据需要多次执行替换,“s”表示“。”。 匹配包含换行符的所有字符(否则将不包括换行符,因此每行需要运行一次模式,并且不会覆盖跨越多行的标记)。

你不应该使用正则表达式来解析XML或HTML,它只是不可靠而且有太多边缘情况。 你应该使用XML / HTML解析器代替这种东西。

不要使用正则表达式。 尝试将XML解析为DOM,并从那里进行操作(您使用的是哪种语言/框架?);