4

私はこのようなxmlテンプレートを持っています

<User>
<UserId></UserId>
<UserName></UserName>
<Roles>
<Role></Role>
<Roles></Role>
</Roles>
</User>

このxmlテンプレートファイルを作成し、動的にxmlを生成したいのですが、どうすればよいですか?

出力xmlは次のようになります

<User>
<UserId>user1</UserId>
<UserName>fr</UserName>
<Roles>
<Role>abc</Role>
<Role>def</Role>
</Roles>
</User>

どうすればこれを達成できますか。テンプレートファイルで行う必要のあるすべての変更。c#を使用してこの一時的なxmlファイルからxmlを読み取って作成する方法。

4

4 に答える 4

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")

XLMソース

<User>
  <UserId>{{user.UserId}}</UserId>
  <UserName>{{user.UserName}}</UserName>
  <Roles Tor.Repeat="role in user.Roles">
    <Role>{{role}}</Role>
  <Roles></Role>
  </Roles>
</User>

編集済み

<User>
  <UserId>1</UserId>
  <UserName>my name</UserName>
  <Roles>
    <Role>admin</Role>
    <Role>sales</Role>
  <Roles></Role>
  </Roles>
</User>

Nugetからもインストールできます。

Install-Package SuperXML
于 2015-08-07T06:01:25.797 に答える
5

XmlSerializerテンプレートに従ってプロパティを持つ単純なクラスを使用および作成できます。

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

   ...
}

そして、クラスをXMLファイルにシリアル化します。

ここに良い例があります。

オプション#2:何らかの理由でuse
を使用したくない場合-要素を閉じるのを忘れないようにするために、「AutoClose」XmlWriterを使用することをお勧めします-この単純なクラスを作成する方法についてブログに書いています-XmlWriter that IDisposableを使用して要素を自動的に閉じますXmlSerializerXmlWriter

于 2012-04-04T07:18:04.687 に答える
0

var templateXML = "C://template.xml"//full path for the template xml XmlDocument doc = new XmlDocument(); FileStream fs = new FileStream(templateXML, FileMode.Open, FileAccess.Read); doc.Load(fs); XmlNode node = doc.DocumentElement; XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace("pf", "http://www.example.com/abc"); node = doc.DocumentElement; nodeName = "/pf:Message/pf:User/pf:UserID"; node.SelectSingleNode(nodeName, nsmgr).InnerXml = "user1";put you custom value nodeName = "/pf:Message/pf:User/pf:UserName";
node.SelectSingleNode(nodeName, nsmgr).InnerXml = "fr";put you custom value .... ..... ....... var postData = node.ParentNode.InnerXml; postData = node.OuterXml;

于 2016-09-29T11:19:22.767 に答える