Noobie到XML / Xdocument世界。 尝试使用可变数量的DataField元素创建一个Xdocument,这些元素作为元组列表传入。 此文档用作API调用的一部分,用于编辑远程服务器上的记录中的字段。 当我尝试在foreach循环中添加DataField元素时,xdoc被视为Null。所以我不断收到NullReferenceException错误。 为什么我刚刚创建它时xdoc或其XElements = null? 我知道这不是一个困难的情况,但在最近几天我浏览了几个网站 很明显,我没有得到非常基本的东西。
public XDocument MakeXDoc(string frmID, string prj, List<Tuple<string, string, string>> frmdata)
{
XNamespace ns = "http://xxxxxxx.yyyyyy.com/api/v1/";
var xdoc = new XDocument(
new XDeclaration("1.0", "utf-8", null),
new XElement(ns + "ProjectDataRequest",
new XElement(ns + "Project",
new XElement(ns + "DataFields", new XAttribute("ProjectId", prj), new XAttribute("FormId", frmID),
new XElement(ns + "DataField" , new XAttribute("DataFieldId", ""), new XAttribute("Value", "") )))));
foreach (Tuple<string, string, string> fld in frmdata)
{
XElement xdf = new XElement(ns + "DataField", new XAttribute("DataFieldId", fld.Item1.ToString()), new XAttribute("Value", fld.Item3.ToString()));
xdoc.Element(ns + "DataField").Add(xdf);
}
return xdoc;
}
答案 0 :(得分:0)
抛出异常,因为还没有元素。要构建所需的XML,您可以使用LINQ&#39; Select
:
XDocument MakeXDoc(string frmID, string prj, List<Tuple<string, string, string>> frmdata)
{
XNamespace ns = "http://xxxxxxx.yyyyyy.com/api/v1/";
var xdoc = new XDocument(
new XDeclaration("1.0", "utf-8", null),
new XElement(ns + "ProjectDataRequest",
new XElement(ns + "Project",
new XElement(ns + "DataFields", new XAttribute("ProjectId", prj), new XAttribute("FormId", frmID),
frmdata.Select(d => new XElement(ns + "DataField", new XAttribute("DataFieldId", d.Item1), new XAttribute("Value", d.Item3)))))));
return xdoc;
}
它为DataField
中的每个项目添加了一个新的frmdata
元素作为DataFields
的子项。