C#从xml

时间:2016-11-24 15:04:06

标签: c# regex xml

我需要读取一个不符合xml规则的xml文件。所以我需要在我将其作为xml文件读取之前做好。存在像“&”这样的符号en“<”元素之间。

<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", " &amp; ");
            text = Regex.Replace(text, @"[<]\d+", "&lt;");

之后我将文本写入文件,我将其作为xml读入。

“&lt;”的问题是它正在删除数字,我需要保持。另外我不知道这是否有良好的表现?这也适用于verry大文件吗?它也只适用于这种情况,但如果我们将来有更多案例呢?是否有将这些预定义实体更改为其xml格式的一般方法?

ps:我知道这应该在制作xml文件时处理,但它来自一个thirth派对而且他们无法改变它。

1 个答案:

答案 0 :(得分:1)

你应该试试这个

text = Regex.Replace(text, @"(\s+)&(\s+)", "$1&amp;$2");
text = Regex.Replace(text, @"[<](\d+)", "&lt;$1");
  • 首先更改\ s到\ s +以选择&amp;即使它被一个以上的空间包围,但是通过使用+它意味着在不到一个空间。
  • 第二次将\d+更改为(\d+),我可以使用$1包含所选数字的值,同样适用于\ s +,如果你有更多超过一个选定的组,订单将是$ 1,$ 2等。
  • 为了提高效果,您可以将RegexOptions.Compiled添加到正则表达式中,例如text = Regex.Replace(text, @"(\s+)&(\s+)", "$1&amp;$2",RegexOptions.Compiled);

此外,如果您想要更改所有&,则必须删除(\s+)