【问题标题】:Adding elements to XDocument at runtime from DataTable在运行时从 DataTable 将元素添加到 XDocument
【发布时间】:2014-05-25 05:33:35
【问题描述】:

我正在尝试通过在运行时从DataTable 提取数据来使用XDocument 生成XML。我想以这种格式输出:

<Document>
  <Alphabets>
    <Data>
      <Capital>AAA</Capital>
      <Small>aaa</Small>
    </Data>    
  </Alphabets>
  <Language>
      <Name>English</Name>
  </Language>
  <Alphabets>
    <Data>
      <Capital>BBB</Capital>
      <Small>bbb</Small>
    </Data>
  </Alphabets>
  <Language>
      <Name>English</Name>
  </Language>
</Document>

Language 元素必须出现在每个 Alphabets 元素之后。我已经非常努力地实现了这一点,但我无法将这个 Alphabets 标签放在每个 Language 元素之后。我所取得的成就是,Language 元素落在Alphabets 元素内:

<Document>
  <Alphabets>
    <Data>
      <Capital>AAA</Capital>
      <Small>aaa</Small>
    </Data>
    <Language>
      <Name>English</Name>
    </Language>
  </Alphabets>
  <Alphabets>
    <Data>
      <Capital>BBB</Capital>
      <Small>bbb</Small>
    </Data>
    <Language>
      <Name>English</Name>
    </Language>
  </Alphabets>
</Document>  

这是我的代码:

        static void Main(string[] args)
        {
            DataTable dtAlpha = new DataTable("Alphabetss");
            dtAlpha.Columns.Add("Capital", typeof(string));
            dtAlpha.Columns.Add("Small", typeof(string));

            dtAlpha.Rows.Add("AAA", "aaa");
            dtAlpha.Rows.Add("BBB", "bbb");

            XDocument doc = new XDocument(
                new XDeclaration("1.0", "UTF-8", null),
                new XElement("Document",
                        from row in dtAlpha.AsEnumerable()
                        select new XElement("Alphabets",
                            new XElement("Data",
                                new XElement("Capital", row.Field<string>("Capital")),
                                new XElement("Small", row.Field<string>("Small"))
                                         ),
                        new XElement("Language",
                            new XElement("Name", "English")
                            )))
                            );
            Console.WriteLine(doc.ToString());
            Console.ReadKey();
        }  

请帮帮我。

【问题讨论】:

    标签: c# .net xml linq-to-xml


    【解决方案1】:

    你可以试试这个方法:

    XDocument doc = new XDocument(
        new XDeclaration("1.0", "UTF-8", null),
        new XElement("Document")
    );
    
    foreach(var row in dtAlpha.AsEnumerable())
    {
        var alphabets = new XElement("Alphabets",
                            new XElement("Data",
                                new XElement("Capital", row.Field<string>("Capital")),
                                new XElement("Small", row.Field<string>("Small"))
                            )
                        );
        var language = new XElement("Language",
                            new XElement("Name", "English")
                        );
        doc.Root.Add(alphabets);
        doc.Root.Add(language);
    }
    

    【讨论】:

    • 太棒了.. 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    相关资源
    最近更新 更多