5

私がやろうとしているのは、xml でプレースホルダーを見つけて置き換えることです。Jinja2 は Python でこれを行いましたが、C# で同様のものを探しています。基本的に私がやりたいことはこれを取ることです:

<?xml version="1.0" encoding="utf-8"?>
<Data>
  <Title>{{ myTitle }}</Title>
  <Comp>
  {% for item in compItems %}  <CompItem>
      <CompItemConfig>{{ item.config }}</CompItemConfig>
    </CompItem>
  </Comp>
{% endfor %}
</Data>

そして、プログラムで次のように変換します。

<?xml version="1.0" encoding="utf-8"?>
<Data>
  <Title>Brown Fox</Title>
  <Comp>
    <CompItem>
      <CompItemConfig>QUICK</CompItemConfig>
    </CompItem>
    <CompItem>
      <CompItemConfig>JUMPS</CompItemConfig>
    </CompItem>
    <CompItem>
      <CompItemConfig>NOT LAZY</CompItemConfig>
    </CompItem>
  </Comp>
</Data>

参考までに、それがどのように機能するかの簡単な例は次のとおりです。

Dictionary<string, string> myDictionary = new Dictionary<string, string>();
myDictionary.Add("myTitle", "Brown Fox");
myDictionary.Add("compItem", "QUICK");
myDictionary.Add("compItem", "JUMPS");
myDictionary.Add("compItem", "NOT LAZY");
FillTemplate("C:\myTemplate.xml", myDictionary);

どんな助けでも素晴らしいでしょう。ありがとうございました!

4

2 に答える 2

5

C# には、XML シリアル化と逆シリアル化のためのツールが組み込まれています: https://msdn.microsoft.com/en-us/library/szzyf24s(v=vs.110).aspx

あなたは単に次のように述べます:

[XmlType("Data")]
public class Data {

  [XmlElement("Title")]
  public string Title {get; set; }

  [XmlArray("Comp")]
  [XmlArrayItem("CompItem")]
  public List<CompItem> Comp {get; set; }

}

と:

[XmlType("Foo")]
public class CompItem {

  [XmlElement("CompItemConfig")]
  public string Config {get; set; }

}

次にData、単純な C# コードで -object を構築できます。最後に、次のコードを使用して XML ファイルに変換できます。

Data data = new Data(...);//create Data object
System.Xml.Serialization.XmlSerializer xmls = new System.Xml.Serialization.XmlSerializer(typeof(Data));
System.IO.StreamWriter writer= new System.IO.StreamWriter(@"C:\myTemplate.xml");
writer.Serialize(file, data);
writer.Close();

詳細については、http: //msdn.microsoft.com/en-us/library/vstudio/ms172873.aspxを参照してください。

于 2013-09-10T04:20:07.673 に答える