Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除XML标记及其内容之间的任何内容_Xml_Ruby_Regex_Hpricot - Fatal编程技术网

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

删除XML标记及其内容之间的任何内容,xml,ruby,regex,hpricot,Xml,Ruby,Regex,Hpricot,我需要删除XML标记之间的任何内容,特别是空格和换行符 例如,从中删除空白和新闻行: \n 获取: 这不是为了手动解析XML,而是为了在使用工具解析XML数据之前准备XML数据。更具体地说,我正在使用Hpricot(Ruby)解析XML,不幸的是,我们目前停留在版本0.6.164上,所以。。。我不知道最近的版本,但这个版本通常返回只包含空格和换行符的奇怪节点(对象)。因此,我们的想法是在将XML转换为Hpricot文档之前对其进行清理。我们赞赏其他解决方案 测试示例:NoMethodError

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

例如,从中删除空白和新闻行:
\n

获取:

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

测试示例:NoMethodError:undefined方法“\n”:Hpricot::Text的“children”
这里有趣的部分不是NoMethodError,因为这很好,但是Hpricot::Text元素只包含一个换行符,没有其他内容。

请不要使用正则表达式来解析XML。它极易出错


使用一个合适的XML库,这将使它变得简单。几乎每种编程平台都有XML库可供使用——没有理由对XML使用正则表达式。

你不应该使用正则表达式来解析XML或HTML,它不可靠,而且边缘情况太多。您应该使用XML/HTML解析器来处理这类内容

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

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

也就是说,类似于:

s/>.*?</></gs

s/>.*?解决方案是选择所有“空白”文本节点并将其删除

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