【问题标题】:build xml with multiple elements c#构建具有多个元素的xml c#
【发布时间】:2017-11-13 00:43:20
【问题描述】:

我想用 sql server 推送的数据创建一个 xml 文件,我想像这样构建 xml:

<Items Class="1" Grade="20" Score="150">
    <Item ID="1" TemplateID="11233" StrengthLevel="0" AttackCompose="0" DefendCompose="0" LuckCompose="0" AgilityCompose="0" IsBind="true" ValidDate="0" Count="1" />
    <Item ID="2" TemplateID="200216" StrengthLevel="0" AttackCompose="0" DefendCompose="0" LuckCompose="0" AgilityCompose="0" IsBind="true" ValidDate="0" Count="1" />
    <Item ID="3" TemplateID="11408" StrengthLevel="0" AttackCompose="0" DefendCompose="0" LuckCompose="0" AgilityCompose="0" IsBind="true" ValidDate="0" Count="2" />
  </Items>

这是我在 c# 中创建它的代码中最重要的部分:

Dictionary<int, Dictionary<int, DailyLeagueAwardList>> dictionary1 = new Dictionary<int, Dictionary<int, DailyLeagueAwardList>>();
      DailyLeagueAwardList[] allDailyLeagueAwardList = produceBussiness.GetAllDailyLeagueAwardList();
      DailyLeagueAwardItems[] allDailyLeagueAwardItems = produceBussiness.GetAllDailyLeagueAwardItems();
      foreach (DailyLeagueAwardList DailyLeagueAwardList in allDailyLeagueAwardList)
      {
        DailyLeagueAwardList.AwardLists = new List<DailyLeagueAwardItems>();
        if (!dictionary1.ContainsKey(DailyLeagueAwardList.Class))
          dictionary1.Add(DailyLeagueAwardList.Class, new Dictionary<int, DailyLeagueAwardList>()
          {
            {
              DailyLeagueAwardList.Grade,
              DailyLeagueAwardList
            }
          });
        else if (!dictionary1[DailyLeagueAwardList.Class].ContainsKey(DailyLeagueAwardList.Grade))
          dictionary1[DailyLeagueAwardList.Class].Add(DailyLeagueAwardList.Grade, DailyLeagueAwardList);
      }
      foreach (DailyLeagueAwardItems DailyLeagueAwardItems in allDailyLeagueAwardItems)
      {
        if (dictionary1.ContainsKey(DailyLeagueAwardItems.ID) && dictionary1[DailyLeagueAwardItems.ID].ContainsKey(DailyLeagueAwardItems.Class))
          dictionary1[DailyLeagueAwardItems.ID][DailyLeagueAwardItems.Class].AwardLists.Add(DailyLeagueAwardItems);
      }
      XElement xelement1 = (XElement) null;
      foreach (Dictionary<int, DailyLeagueAwardList> dictionary2 in dictionary1.Values)
      {
        foreach (DailyLeagueAwardList DailyLeagueAwardList in dictionary2.Values)
        {
          if (xelement1 == null)
            xelement1 = new XElement((XName) "Items", (object) new XAttribute((XName) "Class", 
                (object) DailyLeagueAwardList.Class), (object)new XAttribute((XName)"Grade", 
                (object)DailyLeagueAwardList.Grade), 
                (object)new XAttribute((XName)"Score", 
                (object)DailyLeagueAwardList.Score), 
                (object)new XAttribute((XName)"Rank", 
                (object)DailyLeagueAwardList.Rank));
          foreach (DailyLeagueAwardItems awardList in DailyLeagueAwardList.AwardLists)
          {
            XElement xelement3 = new XElement((XName) "Item", new object[10]
            {
              (object) new XAttribute((XName) "ID", (object) awardList.ID),
              (object) new XAttribute((XName) "TemplateID", (object) awardList.TemplateID),
              (object) new XAttribute((XName) "StrengthLevel", (object) awardList.StrengthLevel),
              (object) new XAttribute((XName) "AttackCompose", (object) awardList.AttackCompose),
              (object) new XAttribute((XName) "DefendCompose", (object) awardList.DefendCompose),
              (object) new XAttribute((XName) "LuckCompose", (object) awardList.LuckCompose),
              (object) new XAttribute((XName) "AgilityCompose", (object) awardList.AgilityCompose),
              (object) new XAttribute((XName) "IsBind", (object) awardList.IsBind),
              (object) new XAttribute((XName) "ValidDate", (object) awardList.ValidDate),
              (object) new XAttribute((XName) "Count", (object) awardList.Count)
            });
            xelement1.Add((object) xelement3);
          }
          //xelement1.Add((object) xelement3);
        }
        result.Add((object) xelement1);
        xelement1 = (XElement) null;
      }

我在 C# 上使用 XElement,我认为问题出在 ↓

foreach (DailyLeagueAwardItems DailyLeagueAwardItems in allDailyLeagueAwardItems)
      {
        if (dictionary1.ContainsKey(DailyLeagueAwardItems.ID) && dictionary1[DailyLeagueAwardItems.ID].ContainsKey(DailyLeagueAwardItems.Class))
          dictionary1[DailyLeagueAwardItems.ID][DailyLeagueAwardItems.Class].AwardLists.Add(DailyLeagueAwardItems);
      }

上面我认为是错误,我该如何解决?

感谢和抱歉英语不好!

*编辑 只返回这个:

<Items Class="1" Grade="20" Score="150" Rank="0" />
  <Items Class="2" Grade="20" Score="200" Rank="0" />
  <Items Class="3" Grade="20" Score="250" Rank="0" />
  <Items Class="4" Grade="20" Score="300" Rank="0" />
  <Items Class="5" Grade="20" Score="400" Rank="0" />
  <Items Class="6" Grade="20" Score="550" Rank="0" />
  <Items Class="7" Grade="20" Score="700" Rank="0" />
  <Items Class="8" Grade="20" Score="850" Rank="0" />
  <Items Class="9" Grade="20" Score="900" Rank="0" />
  <Items Class="10" Grade="30" Score="150" Rank="0" />
  <Items Class="11" Grade="30" Score="200" Rank="0" />
  <Items Class="12" Grade="30" Score="250" Rank="0" />
  <Items Class="13" Grade="30" Score="300" Rank="0" />
  <Items Class="14" Grade="30" Score="400" Rank="0" />
  <Items Class="15" Grade="30" Score="550" Rank="0" />
  <Items Class="16" Grade="30" Score="700" Rank="0" />
  <Items Class="17" Grade="30" Score="850" Rank="0" />
  <Items Class="18" Grade="30" Score="900" Rank="0" />
  <Items Class="19" Grade="40" Score="150" Rank="0" />
  <Items Class="20" Grade="40" Score="200" Rank="0" />
  <Items Class="21" Grade="40" Score="250" Rank="0" />
  <Items Class="22" Grade="40" Score="300" Rank="0" />
  <Items Class="23" Grade="40" Score="400" Rank="0" />
  <Items Class="24" Grade="40" Score="550" Rank="0" />
  <Items Class="25" Grade="40" Score="700" Rank="0" />
  <Items Class="26" Grade="40" Score="850" Rank="0" />
  <Items Class="27" Grade="40" Score="900" Rank="0" />
  <Items Class="28" Grade="100" Score="0" Rank="1" />
  <Items Class="29" Grade="100" Score="0" Rank="2" />
  <Items Class="30" Grade="100" Score="0" Rank="3" />

【问题讨论】:

  • 但是你有什么错误?
  • 还有,你的sql server怎么样,输入是什么?这是awardList 是节点Items 吗?
  • 我用返回的结果刷新帖子,我想要 并且在
  • 它也对我们没有帮助。意思是没有错误,只是&lt;Item&gt;无法导入?
  • 是 Jacky 当我在 5 个变量上方的代码中将 ID 更改为 Class 或 Class 为 ID 时,我尝试更改多个组合一次有效,但是只有元素

标签: c# xml xelement


【解决方案1】:

看了你的问题,你的评论,我还是不明白,我怕问的越多越糊涂。

如果我是你,我不会这样做,而是采用两种方法:

  1. 如果您有这样的字符串内置: (注意:我从你的 xml 中简化)

string str = "&lt;Items Class=\"1\" Grade=\"20\" Score=\"150\"&gt;&lt;Item ID=\"1\" TemplateID=\"11233\" /&gt;&lt;/Items&gt;

那么需要做的是:

XmlDocument doc = new XmlDocument();
doc.LoadXml(str);
doc.Save("myFile.xml"); //Save XML to a physical file if needed
  1. 使用Serialize

从数据库中,你应该有以下类:

我相信你的awardList 属于下面的Items

public class Items
{
    [XmlAttribute()]
    public int Class{get;set;}

    [XmlAttribute()]
    public int Grade{get;set;}

    [XmlAttribute()]
    public double Score{get;set;}


    [XmlElement("Item")]
    public List<Item> Item { get; set; }


}

public class Item
{
    [XmlAttribute()]
    public int ID{get;set;}

    [XmlAttribute()]
    public int TemplateID{get;set;}

    [XmlAttribute()]
    public int StrengthLevel{get;set;}

    [XmlAttribute()]
    public int AttackCompose{get;set;}

    [XmlAttribute()]
    public int DefendCompose{get;set;}

    [XmlAttribute()]
    public int LuckCompose{get;set;}

    [XmlAttribute()]
    public int AgilityCompose{get;set;}

    [XmlAttribute()]
    public bool IsBind{get;set;}

    [XmlAttribute()]
    public int ValidDate{get;set;}

    [XmlAttribute()]
    public int Count{get;set;}

}

那么最后:(我从here复制过来的,懒得重新打字了

XmlSerializer xsSubmit = new XmlSerializer(typeof(MyObject));
 var subReq = new MyObject();
 var xml = "";

 using(var sww = new StringWriter())
 {
     using(XmlWriter writer = XmlWriter.Create(sww))
     {
         xsSubmit.Serialize(writer, subReq);
         xml = sww.ToString(); // Your XML
     }
 }

【讨论】:

  • 不是我想要的,我知道,这很难解释和混淆,但还是非常感谢你帮助我,为更多像你这样的人:))
  • @Thiago 有时,重建一切会让你焕然一新。无论如何,与手动工作相比,使用序列化可以帮助您避免人为错误
猜你喜欢
  • 2019-07-03
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多