如何手动替换xml特殊字符?

时间:2009-03-05 16:23:36

标签: c# xml

我的应用程序生成一个xml文件,然后将xslt转换为一个漂亮的html报告。我有一个问题\ n然而。有一些xslt技术可以做到这一点,但它们非常笨拙且耗时。

所以我的解决方案是做一个string.replace \ n到

< br />

然后强制xmlWriter用WriteRaw(text)写这个。问题是文本有时会有一些非法的字符,如>。

我无法在.net中找到任何只接受字符串并在xml友好字符串中转换它的实用程序方法。我看着反射器,处理这个逻辑的类不公开。

任何想法(除了编写我自己的代码来执行此操作)?

2 个答案:

答案 0 :(得分:4)

永远不要使用字符串操作来生成XML。这不仅仅是因为让社交不善的人嘲笑你:它导致代码中存在你不知道存在的错误

从测试驱动的角度考虑它。您编写了一个使用字符串操作生成XML的方法。好的,现在为它编写一个测试用例,证明它永远不会发出格式不正确的XML。为了使测试证明这一点,您必须测试XML建议中概述的每个可能的方案。您是否足够了解XML建议以断言您的测试是否可以执行此操作?

不,你没有。除非你正在为XML生成编写框架,否则你并不是真的想要。这就是您使用System.Xml中的类来生成XML的原因。写这些文章的人做了那些工作,所以你不必这样做。

Tomalak展示了如何做你正在尝试用XSLT做的事情。如果您使用XmlWriter生成XML,请使用以下模式:

string s = "replace\nnewlines\nwith\nbreaks";
string[] lines = s.Split('\n');
for (int i=0; i<lines.Length; i++)
{
    xw.WriteString(lines[i]);
    if (i<lines.Length - 1)
    {
        xw.WriteElementString("br", "", "");
    }
}

这在适当的地方使用字符串操作 - 在生成XML文本时,在XML之外操作字符串数据时 - 而不是在它之外的地方 -

答案 1 :(得分:3)

我认为这个问题的解决方案可以帮到你:

xslt replace \n with <br/> only in one node?

您可以将提供的模板合并到您的转换过程中,而且您可以轻松完成。