C#从xml中删除无效字符[重复]
Posted
技术标签:
【中文标题】C#从xml中删除无效字符[重复]【英文标题】:C# removing invalid characters from xml [duplicate] 【发布时间】:2017-04-08 22:41:11 【问题描述】:我需要读入一个不符合 xml 规则的 xml 文件。所以我需要在我可以将它作为 xml 文件读取之前把它做好。它在元素之间存在诸如“&”和“
<MAT>
<MATERIAL><MATNR>2286303</MATNR><BESTELTXT>Parts for something & something else</BESTELTXT><WERKS>Material exist out of<1 something</WERKS>
</MAT>
现在我有这个:
我读入文件然后我这样做
text = Regex.Replace(text, @"\s&\s", " & ");
text = Regex.Replace(text, @"[<]\d+", "<");
之后我将文本写入文件,然后我将其作为 xml 读入。
“
ps:我知道这应该在制作 xml 文件时进行处理,但它来自第三方,他们无法更改。
【问题讨论】:
他们不能改变吗?然后更改该供应商 他们没有为你提供一个有效的 XML 文件,你不能指望把它当作一个来阅读。 @Thomas 是的,这很有趣,但通常这不是开发人员的决定权。 @Jamiec 我必须同意你的观点,但我们别无选择,所以就像 CodeCaster 说的那样,这不是我决定的地方。我问过他们并让他们知道,但答案是不可能,所以我坚持下去。 @BramV 看到我 100% 不同意编解码器。 是开发者 IMO 的责任。如果我有报酬成为一名开发人员,那么有人会为我的知识和经验买单。如果这告诉我他们正在使用一个糟糕的供应商,那么该死的,我会向付钱给我的人说清楚。 【参考方案1】:你应该试试这个
text = Regex.Replace(text, @"(\s+)&(\s+)", "$1&$2");
text = Regex.Replace(text, @"[<](\d+)", "<$1");
首先将 \s 更改为 \s+ 以选择 &,即使它被多个空格包围,但使用 + 意味着少于一个空格。
第二次将\d+
更改为(\d+)
通过这样做,我能够使用包含所选数字值的$1
,同样的事情适用于 \s+,如果您有多个选定的组,则顺序将是 1 美元、2 美元等。
为了提高性能,您可以将RegexOptions.Compiled
添加到您的正则表达式中,例如text = Regex.Replace(text, @"(\s+)&(\s+)", "$1&amp;$2",RegexOptions.Compiled);
此外,如果您想更改所有 &
,则必须删除 (\s+)
【讨论】:
请解释您更改的内容,而不是“试试这个”。 以及你为什么改变它 @CodeCaster 够了吗?我没有解释,因为这些是正则表达式世界中的基本内容 如果 OP 精通 Regex 世界中的基本知识,他们就不必问这个问题了,不是吗?但是,是的,这是您添加的一个很好的解释,请点赞。 这是一个很好的观点,谢谢。以上是关于C#从xml中删除无效字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章