如何迭代所有节点?

时间:2016-06-17 14:46:59

标签: c# xml xelement

我正在尝试生成以下输出:

<article> <status> </status> ....</article>
<article> <status> </status> ....</article>

我对循环逻辑几乎没有帮助 - 任何可能出错的建议。我尝试使用&#34; for&#34;循环,但那不能产生所需的输出。请指教。谢谢。

public static string createArticleALL()
    {

        XElement xeRoot = new XElement("article");
        XDocument xDoc = new XDocument(xeRoot);

        using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["###"].ConnectionString))

        {
            con.Open();

            using (SqlCommand command = new SqlCommand("####", con))
            {

                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    string title = reader.GetString(0);  
                    string body = reader.GetString(4);

                    string pub = reader["publication_id"].ToString();
                    string iss = reader["issue_id"].ToString();
                    string sid = reader["STORYID"].ToString(); 


                    string c = url(title, pub, iss, sid);

        DateTime dt = DateTime.Today;

      foreach (XElement element in xDoc.Descendants("article"))
      {

        XElement xeStatus = new XElement("status", "Approved");
        xeRoot.Add(xeStatus);

        XElement xeTitle = new XElement("title", title);
        xeRoot.Add(xeTitle);

        XElement xeSubTitle = new XElement("subtitle", title);
        xeRoot.Add(xeSubTitle);

        XElement xeSynopsis = new XElement("synopsis", body + "...");
        xeRoot.Add(xeSynopsis);

        XElement xeURL = new XElement("url", c);
        xeRoot.Add(xeURL);

        XElement xeDisplayDate = new XElement("display_date", dt);
        xeRoot.Add(xeDisplayDate);


      }


                }
            }


        return xDoc.ToString();
        }
        return null;

    }

1 个答案:

答案 0 :(得分:0)

清理了这个。您必须创建一个article节点,并将其添加到每个while循环的文档中。假设你没有在其他地方使用标题内容,我删除了额外的位。

XDocument xDoc = new XDocument(new XElement("Root"));
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["###"].ConnectionString))
{
    con.Open();

    using (SqlCommand command = new SqlCommand("####", con))
    {
        XElement article;
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            xDoc.Add(article = new XElement("article"));
            article.Add(new XElement("status", "Approved"));
            string title;
            article.Add(new XElement("title", title = reader.GetString(0)));
            article.Add( new XElement("subtitle", title));
            article.Add(new XElement("synopsis", reader.GetString(4) + "..."));

            string pub = reader["publication_id"].ToString();
            string iss = reader["issue_id"].ToString();
            string sid = reader["STORYID"].ToString(); 

            string c = url(title, pub, iss, sid);
            article.Add(new XElement("url", c));

            article.Add(new XElement("display_date", DateTime.Today));
        }
    }
}