如何遍历所有节点?
How to iterate all nodes?
我正在尝试生成以下输出:
<article> <status> </status> ....</article>
<article> <status> </status> ....</article>
我在循环逻辑方面几乎不需要任何帮助 - 任何我可能出错的建议。我尝试使用 "for" 循环,但未能产生所需的输出。请指教。谢谢你。
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;
}
清理了这个。您必须创建一个 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));
}
}
}
我正在尝试生成以下输出:
<article> <status> </status> ....</article>
<article> <status> </status> ....</article>
我在循环逻辑方面几乎不需要任何帮助 - 任何我可能出错的建议。我尝试使用 "for" 循环,但未能产生所需的输出。请指教。谢谢你。
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;
}
清理了这个。您必须创建一个 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));
}
}
}