在取出两个标记之间的所有换行符、制表符和回车符时遇到问题

本文关键字:制表符 换行符 回车 问题 遇到 之间 两个 | 更新日期: 2023-09-27 18:25:42

我已经为此工作了将近一天。但我无法从">"answers"<"中取出所有换行符、制表符和回车符

这是我正在阅读的一个示例XML文件:

                <Consequence_Note>
                    <Text>In some cases, integer coercion errors can lead to exploitable buffer
                        overflow conditions, resulting in the execution of arbitrary
                        code.</Text>
                </Consequence_Note>

和这个

<Consequence_Scope>Availability</Consequence_Scope>
                    <Consequence_Technical_Impact>DoS: resource consumption
                        (CPU)</Consequence_Technical_Impact>

我的目标是从这两个标记(>和<)中去掉所有换行符、制表符和回车符。我唯一能做到的就是当">"answers"<"之间没有任何内容时,从这两个标签中取出所有/n/t/r。但当两个标签之间有其他字符时,我无法删除所有字符。

我需要帮助如何获得一个正则表达式,该表达式将去掉">"answers"<"中的所有换行符、标记和回车

例如:

                <Consequence_Technical_Impact>DoS: resource consumption
                    (CPU)</Consequence_Technical_Impact>

我想要的是:

<Consequence_Technical_Impact>DoS: resource consumption (CPU)</Consequence_Technical_Impact>

这是我的代码(我正在从一个xml文件中读取):

String file = @"C:'Documents and Settings'YYC'Desktop'cwec_v2.1'cwec_v2.1.xml";
var lines = File.ReadAllText(file);
var replace = Regex.Replace(lines, @">(['r'n't])*?<", "><");
File.WriteAllText(file, replace);  

在取出两个标记之间的所有换行符、制表符和回车符时遇到问题

不要用regexp解析html/xml(RegEx匹配除XHTML自包含标记之外的开放标记)!

对XML使用XML阅读器,对html使用HtmlAgilityPack(或其他一些html工具)。

xml/html文档非常复杂,regexp并不总是(在某些情况下是的,但不是一般的)完全正确地完成工作。

如果您第一次使用XmlReader读取文档,默认情况下它会从输入中删除换行符。然后你可以简单地用正确的设置把它写出来。

请参阅:http://msdn.microsoft.com/en-us/library/system.xml.xmlreadersettings.ignorewhitespace.aspx请参阅:http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.newlinehandling.aspx

可能可以构建regex替代方案,但对于包含CData、注释和其他构造的XML,它仍然会有很多问题,这些构造使得XML一开始就很难解析。如果您的XML是结构化的、机器生成的并且不变的,那么您可以创建一个regex来修复它,但另一方面,您也可以修复生成器。可能工作的最简单正则表达式:

's{2,} 

替换为

[ ]

这会去掉任何超过一个字符的空白,并用一个空格替换。不需要以不同的方式处理标记中的任何其他空白,无论如何,XMLReader默认都应该这样做。