【问题标题】:How to replace xml special chars manually?如何手动替换 xml 特殊字符?
【发布时间】:2009-03-05 16:23:35
【问题描述】:

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

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


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

我无法在 .net 中找到任何仅接收字符串并将其转换为 xml 友好字符串的实用程序方法。我查看了反射器,处理此逻辑的类不是公开的。

任何想法(除了编写我自己的代码来做到这一点)?

【问题讨论】:

  • 请将您当前的代码提交给 The Daily WTF (thedailywtf.com/Contact.aspx)。你会很容易获得首页。
  • 老兄,太苛刻了。至少,即使他的代码是最糟糕的一堆蒸汽,他也在努力学习得更好。这至少值得尊重。
  • 谁在乎? TDWTF 不是关于学习,它是关于嘲笑人们试图将 XML 解析为字符串并且失败了。他目前的解决方案上写满了 WTF。他从托马拉克那里得到了答案。现在让我们对他破旧的代码大笑一番吧。
  • 如果不是字符串解析,那么“所以我的解决方案是做一个 string.replace \n 到
    ”是什么?你认为字符串解析是什么?
  • @Welbog:如果是 XML 就不是字符串解析! XML 不是字符串;它的标签。呵呵。

标签: c# xml


【解决方案1】:

永远不要使用字符串操作来生成 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 文本时。

【讨论】:

    【解决方案2】:

    我认为这个问题的解决方案会对你有所帮助:

    xslt replace \n with &lt;br/&gt; only in one node?

    您可以将提供的模板合并到您的转换过程中,并且您无需弄脏双手即可完成。

    【讨论】:

    • 谢谢,成功了。我知道您的帖子,但我正在寻找更快的解决方案。我现在选择不及早优化:)。
    • 嗯。这是一个很好的决定,我想。 ;-) 如果您愿意,可以在此处发布一些性能测量结果。我的猜测是它实际上并没有灾难性的缓慢。并确保输出有效。
    猜你喜欢
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2019-05-23
    • 2011-12-28
    相关资源
    最近更新 更多