如何从模板创建 xml-c#

use*_*834 4 .net c# xml

我有一个像这样的 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。

bto*_*rdz 6

序列化是一个选项,但如果你真的需要一个模板,你可以使用这个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)


Dro*_*per 5

您可以XmlSerializer根据模板使用和创建一个具有属性的简单类:

public class User
{
   public UserId{get;set;}

   ...
}
Run Code Online (Sandbox Code Playgroud)

并将类序列化为 XML 文件。

有一个很好的例子在这里

选项#2
如果由于某种原因你不想使用XmlSerializer使用XmlWriter- 为了防止忘记关闭元素,我建议你使用“AutoClose”XmlWriter - 我已经在我的博客上写了关于如何创建这个简单类的博客 - XmlWriter使用 IDisposable 自动关闭元素