Asp.net 如何从XDocument实例/对象获取值
我对使用XML编程相当陌生,在访问/操作该数据类型中的值时遇到了困难。我使用了一个字符串变量Asp.net 如何从XDocument实例/对象获取值,asp.net,xml,Asp.net,Xml,我对使用XML编程相当陌生,在访问/操作该数据类型中的值时遇到了困难。我使用了一个字符串变量xmlDoc,并分配了xml文档(字符串格式)xmlDoc=drvEval.Row[“EvalAnswers”].ToString() 当我试着运行这个时 foreach(答案中的变量答案) { 回答。写(“ddl_item=“+answer.item+”answer=“+answer.answer+”); } 它只给我一个输出。结果的第一个节点,而不是我解析的xml文档的所有内容。以下是完整的代码:
xmlDoc
,并分配了xml文档(字符串格式)xmlDoc=drvEval.Row[“EvalAnswers”].ToString()代码>
当我试着运行这个时
foreach(答案中的变量答案)
{
回答。写(“ddl_item=“+answer.item+”answer=“+answer.answer+”
);
}
它只给我一个输出。结果的第一个节点,而不是我解析的xml文档的所有内容。以下是完整的代码:
private void ddl_Eval_SelectedIndexChanged (Object sender, System.EventArgs e)
{
//Response.Write(ddl_Eval.SelectedValue.ToString() + " " + "value: " + ddl_Eval.SelectedIndex);
dtEval = new DataTable();
dtEval = data.GetEvaluation2();
DataView dvEval = dtEval.DefaultView;
string xmlDoc = String.Empty;
foreach (DataRowView drvEval in dvEval)
{
if (drvEval.Row["EvaluationID"].ToString() == ddl_Eval.SelectedValue.ToString())
{
xmlDoc = drvEval.Row["EvalAnswers"].ToString();
}
}
XDocument xdoc = new XDocument();
xdoc = XDocument.Parse(xmlDoc);
//Response.Write(xmlDoc);
var answers = from answer in xdoc.Descendants("ANSWERS")
select new
{
Answer = answer.Element("Answer").Value,
Item = answer.Element("Answer").Attribute("item").Value,
};
foreach (var answer in answers)
{
Response.Write("ddl_item=" + answer.Item + " answer=" + answer.Answer + "<br />");
}
}
private void ddl_Eval_SelectedIndexChanged (Object sender, System.EventArgs e)
{
//Response.Write(ddl_Eval.SelectedValue.ToString() + " " + "value: " + ddl_Eval.SelectedIndex);
dtEval = new DataTable();
dtEval = data.GetEvaluation2();
DataView dvEval = dtEval.DefaultView;
string xmlDoc = String.Empty;
foreach (DataRowView drvEval in dvEval)
{
if (drvEval.Row["EvaluationID"].ToString() == ddl_Eval.SelectedValue.ToString())
{
xmlDoc = drvEval.Row["EvalAnswers"].ToString();
}
}
XDocument xdoc = new XDocument();
xdoc = XDocument.Parse(xmlDoc);
foreach (XElement child in xdoc.Root.Elements("Answer"))
{
Response.Write(child.Attribute("item").Value + " " + child.Value + "<br />");
}
}
private void ddl\u Eval\u SelectedIndexChanged(对象发送方,System.EventArgs e)
{
//Write(ddl_Eval.SelectedValue.ToString()+“”+”值:“+ddl_Eval.SelectedIndex);
dtEval=新数据表();
dtEval=data.GetEvaluation2();
DataView-dvEval=dtEval.DefaultView;
string xmlDoc=string.Empty;
foreach(dvEval中的DataRowView drvEval)
{
if(drvEval.Row[“EvaluationID”].ToString()=ddl_Eval.SelectedValue.ToString())
{
xmlDoc=drvEval.Row[“EvalAnswers”].ToString();
}
}
XDocument xdoc=新的XDocument();
xdoc=XDocument.Parse(xmlDoc);
//Response.Write(xmlDoc);
var answers=来自xdoc.subjects中的应答(“应答”)
选择新的
{
答案=答案。元素(“答案”)。值,
Item=answer.Element(“answer”).Attribute(“Item”).Value,
};
foreach(答案中的var答案)
{
回答。写(“ddl_item=“+answer.item+”answer=“+answer.answer+”
);
}
}
这是我从SQL中得到的XML(字符串格式,而不是XML数据类型)
您应该向XML文件添加元素,而不是每次只为字符串指定一行(并覆盖以前添加的内容)
如果要使用此方法,请使用:
xmlDoc += drvEval.Row["EvalAnswers"].ToString();
或者更有效地
StringBuilder xmlDoc = new StringBuilder();
foreach (DataRowView drvEval in dvEval)
{
if (drvEval.Row["EvaluationID"].ToString() == ddl_Eval.SelectedValue.ToString())
{
xmlDoc.Append(drvEval.Row["EvalAnswers"].ToString());
}
}
但我建议使用Linq到XML的方法:
或者,如果您有大量数据,请使用XmlWriter或XmlTextWriter,这将在磁盘上创建一个高效的文件
哇!在做了更彻底的研究之后,我能够回答我自己的问题D
以下是完整的代码:
private void ddl_Eval_SelectedIndexChanged (Object sender, System.EventArgs e)
{
//Response.Write(ddl_Eval.SelectedValue.ToString() + " " + "value: " + ddl_Eval.SelectedIndex);
dtEval = new DataTable();
dtEval = data.GetEvaluation2();
DataView dvEval = dtEval.DefaultView;
string xmlDoc = String.Empty;
foreach (DataRowView drvEval in dvEval)
{
if (drvEval.Row["EvaluationID"].ToString() == ddl_Eval.SelectedValue.ToString())
{
xmlDoc = drvEval.Row["EvalAnswers"].ToString();
}
}
XDocument xdoc = new XDocument();
xdoc = XDocument.Parse(xmlDoc);
//Response.Write(xmlDoc);
var answers = from answer in xdoc.Descendants("ANSWERS")
select new
{
Answer = answer.Element("Answer").Value,
Item = answer.Element("Answer").Attribute("item").Value,
};
foreach (var answer in answers)
{
Response.Write("ddl_item=" + answer.Item + " answer=" + answer.Answer + "<br />");
}
}
private void ddl_Eval_SelectedIndexChanged (Object sender, System.EventArgs e)
{
//Response.Write(ddl_Eval.SelectedValue.ToString() + " " + "value: " + ddl_Eval.SelectedIndex);
dtEval = new DataTable();
dtEval = data.GetEvaluation2();
DataView dvEval = dtEval.DefaultView;
string xmlDoc = String.Empty;
foreach (DataRowView drvEval in dvEval)
{
if (drvEval.Row["EvaluationID"].ToString() == ddl_Eval.SelectedValue.ToString())
{
xmlDoc = drvEval.Row["EvalAnswers"].ToString();
}
}
XDocument xdoc = new XDocument();
xdoc = XDocument.Parse(xmlDoc);
foreach (XElement child in xdoc.Root.Elements("Answer"))
{
Response.Write(child.Attribute("item").Value + " " + child.Value + "<br />");
}
}
private void ddl\u Eval\u SelectedIndexChanged(对象发送方,System.EventArgs e)
{
//Write(ddl_Eval.SelectedValue.ToString()+“”+”值:“+ddl_Eval.SelectedIndex);
dtEval=新数据表();
dtEval=data.GetEvaluation2();
DataView-dvEval=dtEval.DefaultView;
string xmlDoc=string.Empty;
foreach(dvEval中的DataRowView drvEval)
{
if(drvEval.Row[“EvaluationID”].ToString()=ddl_Eval.SelectedValue.ToString())
{
xmlDoc=drvEval.Row[“EvalAnswers”].ToString();
}
}
XDocument xdoc=新的XDocument();
xdoc=XDocument.Parse(xmlDoc);
foreach(xdoc.Root.Elements(“应答”)中的XElement子元素)
{
Response.Write(child.Attribute(“item”).Value+“”+child.Value+“
”);
}
}
现在我可以得到答案的值和item属性的值。可能的重复项