我已经为此工作了将近一天。但我无法从“>”中取出所有换行符,制表符和回车符和“<”
这是我正在阅读的示例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>
我的目标是从这两个标记(&gt;和&lt;)中取出所有换行符,制表符和回车符。我唯一能做到的就是从“&gt;”中取出所有的/ n / t / r和“&lt;”当两个标签之间没有任何东西时。但是当两个标签之间还有其他字符时,我无法取出所有\ n \ t \ r \ n。
我需要有关如何使用正则表达式的帮助,该表达式将从“&gt;”中取出所有换行符,标记符和回车符和“&lt;”
例如:
<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);
答案 0 :(得分:1)
请勿使用regexp(RegEx match open tags except XHTML self-contained tags)解析html / xml!
为xtml使用XML阅读器或使用HtmlAgilityPack(或其他一些html工具)。
xml / html文档非常复杂,正则表达式并不总是(在某些情况下是肯定的,但并非一般)完成正确的工作。
答案 1 :(得分:0)
如果您首先使用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
可能会构建一个正则表达式替代方案,但是对于包含CData,注释和其他构造的XML来说,它仍然会有很多问题,这些构造使XML难以解析。如果XML非常结构化,机器生成且不变,您可以创建一个正则表达式来修复它,但另一方面,您也可以修复生成器。最简单的正则表达式可能有效:
\s{2,}
替换为
[ ]
删除任何长于一个字符的空格,并用一个空格替换它。不需要以不同的方式处理标记内的任何其他空格,这就是XMLReader默认应该做的事情。