从xml文件中检索时,不保留换行符。我用过cdata

时间:2012-10-25 12:25:48

标签: c# xml mstest

我是使用mstest框架进行单元测试用例编写的新手,我仍然坚持从xml文件中检索新行字符作为预期值的输入。以下是测试方法

public void ExtractNewLineTest()

{
    MathLibraray target = new MathLibraray(); // TODO: Initialize to an appropriate value
    string expected = TestContext.DataRow["ExpectedValue"].ToString(); => I am retrieving the value from the xml file.
    string actual;
    actual = target.ExtractNewLine();
    Assert.AreEqual(expected, actual);
}

以下是xml内容

<ExtractNewLineTest>
      <ExpectedValue><![CDATA[select distinct\tCDBREGNO,\r\n\tMOLWEIGHT,\r\n\tMDLNUMBER\r\nfrom Mol]]></ExpectedValue>
 </ExtractNewLineTest>

当我从xml检索数据到期望值时,我得到低于字符串

ExpectedValue = “select distinct\\tCDBREGNO,\\r\\n\\tMOLWEIGHT,\\r\\n\\tMDLNUMBER\\r\\nfrom Mol”;

如果我们看到上面的值,则会为\ n和\ r添加额外的斜杠。 请让我知道,我如何断言这个价值。谢谢!

1 个答案:

答案 0 :(得分:2)

您的XML文件不包含换行符。它包含反斜杠,后跟trn。忠实地从XML文件中读取该组合,然后调试器在向您显示反斜杠时转义反斜杠。

如果要将“C#string escaping”规则应用于从XML读取的值,您可以这样做,但是您应该知道需要这样做。一种简单的方法是:

expectedValue = expectedValue.Replace("\\t", "\t")
                             .Replace("\\n", "\n")
                             .Replace("\\r", "\r")
                             .Replace("\\\\", "\\");

有些情况下会出错 - 例如,如果你有一个正版反斜杠后跟t。虽然这对你来说可能已经足够了。如果没有,你将不得不写一个“正确的”替换,从一开始就读取字符串并处理各种情况。