我正在尝试构建一个动态XDoc,其中包含一个工具用作“路径”的文件夹列表。每个“Folder”元素是树中的另一个层
示例:
Root Level
-- Folder L0
-- Folder L1
-- Folder L2
在XML中表示如下:
<FolderPath>
<Folder>L0</Folder>
<Folder>L1</Folder>
<Folder>L2</Folder>
</FolderPath>
我的代码如下:
// Build up the innermost folders inside the Folderpath element dynamically
XElement folderPath = new XElement();
folderPath.Add(new XElement(FolderList[0],
new XAttribute("fromDate", FromDate),
//attributes for Folder w/ lots of attributes
new XAttribute("toDate", ToDate),
new XAttribute("contactName", ContactName),
new XAttribute("email", Email),
FolderList[0]));
for (int i = 1; i < FolderList.Count; i++)
{
folderPath.Add(new XElement(FolderList[i]));
}
FolderList是我在代码中此点之前填充的List。但是我遇到了问题:
XElement folderPath = new XElement();
实现XElement的好方法是什么,以便我可以动态添加FolderList中包含的文件夹?我得到的错误是“System.Xml.Linq.XElement不包含带0参数的构造函数”。
答案 0 :(得分:1)
XElement类中有no parameter-less constructor
您应该像这样初始化它,例如
XElement xFolderPath = new XElement("FolderPath");
它接受字符串,因为它可以implicitly
转换为XName
克服问题的另一个棘手方法是定义xFolderPath
对象实例
答案 1 :(得分:0)
XElement
没有无参数构造函数。您想要使用的构造函数需要将XName分配给XElement,并且可选地,您也可以传递该XElement
的内容。
您可以在下面的代码中看到创建XElement
folderPath变量的位置,我使用XElement(XName name, params object[] content)
,您传递XElement
的名称,并在在这种情况下,我传递了一组XAttribute
个对象作为其内容。
之后,我创建了一个名为previousNode的临时XElement
对象,并为其分配了folderPath对象。
在for循环中,我使用XElement
构造函数创建一个名为newNode的新XElement(XName name)
,并将其作为内容添加到previousNode XElement
,然后设置previousNode作为新创建的newNode,所以任何其他元素都将作为XElement
的子元素添加,创建我想要的层次结构,如代码示例所示。
using System;
using System.Collections.Generic;
using System.Xml.Linq;
namespace CommandLineProgram
{
public class DefaultProgram
{
public static void Main(string[] args)
{
List<String> FolderList = new List<string>() { "L0", "L1", "L2" };
DateTime FromDate = DateTime.Now;
DateTime ToDate = DateTime.Now;
String ContactName = "ContactName";
String Email = "contact@email.com";
XElement folderPath = new XElement(FolderList[0],
new XAttribute("fromDate", FromDate),
//attributes for Folder w/ lots of attributes
new XAttribute("toDate", ToDate),
new XAttribute("contactName", ContactName),
new XAttribute("email", Email));
XElement previousNode = folderPath;
for (int i = 1; i < FolderList.Count; i++)
{
XElement newNode = new XElement(FolderList[i]);
previousNode.Add(newNode);
previousNode = newNode;
}
}
}
}
<L0 fromDate="2015-03-23T16:13:52.6702528-05:00"
toDate="2015-03-23T16:13:52.6702528-05:00"
contactName="ContactName"
email="contact@email.com">
<L1>
<L2 />
</L1>
</L0>