首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在c#代码文件中内联原始XML

在c#代码文件中内联原始XML
EN

Stack Overflow用户
提问于 2014-03-04 08:09:43
回答 3查看 734关注 0票数 1

我正在创建一个对象序列化单元测试,并希望在c#代码单元测试文件中内联该对象的XML。我知道最简单的内联方式是使用@前缀作为字符串:

代码语言:javascript
运行
复制
var xml = @"<Something> 
                 <AnotherSomething/>
                 <AnotherSomething/>
            </Something>";

我的问题是,我的XML包含属性,而且它非常大,为了内联它,我需要遍历所有的XML,并在XML中对每个“”进行转义,这样做对于一个非常大的XML节点是很难的,并且维护它会很困难-

代码语言:javascript
运行
复制
var xml = @"<Something Att=""s"" Att2=""gg""> 
                     <AnotherSomething/>
                     <AnotherSomething/>
           </Something>";

我不想把XML作为另一个文件标记为部署项-

代码语言:javascript
运行
复制
[DeploymentItem("Something.xml")]

因为它将需要单元测试从磁盘加载文件,这将使单元测试更慢,而且我可能有很多这样的测试。

还有其他方法可以不修改地将XML放入代码中吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-04 08:23:27

正如@leon的评论所建议的那样,使用一个资源文件,但我更进一步。

  1. 添加文件夹资源
  2. 添加一个Resources.resx文件(根据需要重命名)
  3. 使用测试数据TestData.xml添加xml文件
  4. 使其嵌入资源
  5. 将xml文件从解决方案资源管理器中拖到Resource.resx
  6. 确保您的TestData.xml资源类型是文本而不是二进制。
  7. 编译

现在将您的测试数据称为

代码语言:javascript
运行
复制
string data = Resources.TestData;
票数 4
EN

Stack Overflow用户

发布于 2014-03-04 08:27:51

可以使用linq到xml对象来创建xml表示,而不是xml字符串。第二个示例如下所示:

代码语言:javascript
运行
复制
var xml = 
    new XElement("Something",
        new XAttribute("Att", "s"),
        new XAttribute("Att2", "gg"),
        new XElement("AnotherSomething"),
        new XElement("AnotherSomething"));

使用它的更多原因是:确保xml有效性、自动转义特殊字符、在转换为字符串时使用更多格式选项,以及--更容易处理。

票数 1
EN

Stack Overflow用户

发布于 2014-03-04 08:10:58

不,编译器/解析器不允许这样做。

您可以将所有xml放在一个文件中(以某种有效的结构),并让一个实用工具类加载整个文件,并在测试之间缓存它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22166261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档