我有一个像这样的 xml 模板
<User>
<UserId></UserId>
<UserName></UserName>
<Roles>
<Role></Role>
<Roles></Role>
</Roles>
</User>
Run Code Online (Sandbox Code Playgroud)
形成这个xml模板文件,dynamicaly我想生成一个xml。我该怎么做。
输出 xml 应如下所示
<User>
<UserId>user1</UserId>
<UserName>fr</UserName>
<Roles>
<Role>abc</Role>
<Role>def</Role>
</Roles>
</User>
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点。我需要在模板文件中进行哪些更改。如何使用 c# 从这个模板 xml 文件中读取和创建 xml。
序列化是一个选项,但如果你真的需要一个模板,你可以使用这个https://github.com/beto-rodriguez/Templator
这是一个例子
C#
UserClass user = new UserClass();
user.UserId = 1;
user.UserName = "my name";
User.Roles = new List<string>(){"admin", "sales"};
//some other properties...
var compiler = new Compiler()
.AddElementToScope("user", user);
var compiled = compiler.CompileXml(@"C:\...\myXml.xml")
Run Code Online (Sandbox Code Playgroud)
XLM 源
<User>
<UserId>{{user.UserId}}</UserId>
<UserName>{{user.UserName}}</UserName>
<Roles Tor.Repeat="role in user.Roles">
<Role>{{role}}</Role>
<Roles></Role>
</Roles>
</User>
Run Code Online (Sandbox Code Playgroud)
已编译
<User>
<UserId>1</UserId>
<UserName>my name</UserName>
<Roles>
<Role>admin</Role>
<Role>sales</Role>
<Roles></Role>
</Roles>
</User>
Run Code Online (Sandbox Code Playgroud)
你也可以从 Nuget 安装它:
Install-Package SuperXML
Run Code Online (Sandbox Code Playgroud)
您可以XmlSerializer根据模板使用和创建一个具有属性的简单类:
public class User
{
public UserId{get;set;}
...
}
Run Code Online (Sandbox Code Playgroud)
并将类序列化为 XML 文件。
有一个很好的例子在这里。
选项#2:
如果由于某种原因你不想使用XmlSerializer使用XmlWriter- 为了防止忘记关闭元素,我建议你使用“AutoClose”XmlWriter - 我已经在我的博客上写了关于如何创建这个简单类的博客 - XmlWriter使用 IDisposable 自动关闭元素