基于现有 XML 文件创建 XDocument
Creating XDocument based on existing XML file
我正在尝试基于现有 XML 文件创建 XDocument 并将其与 TreeView 一起使用。我想按组元素对联系人进行分组。
XML 文件结构 -
<Contacts>
<Contact>
<First_Name>Ren</First_Name>
<Last_Name>Fuji</Last_Name>
<Group>Test</Group>
<Home_Number>Unavailable</Home_Number>
<Mobile_Number>Unavailable</Mobile_Number>
<Image></Image>
</Contact>
<Contacts>
这是创建 XDocument 对象的方法 -
static XDocument groupXDoc = new XDocument();
private static void CreateGroupsXML()
{
XElement root = new XElement("Groups");
groupXDoc.Add(root);
foreach (XElement xelement in xdoc.Element("Contacts").Elements("Contact").ToList())
{
String groupData = (String)xelement.Element("Group").Value;
XElement groups = new XElement("Group", new XAttribute("Name", groupData));
root.Add(groups);
if (groupXDoc.Root.Element("Group").FirstAttribute.Value == xelement.Element("Group").Value)
{
groups.Add(new XElement("First_Name", (String)xelement.Element("First_Name").Value),
new XElement("Last_Name", (String)xelement.Element("Last_Name").Value),
new XElement("Home_Number", (String)xelement.Element("Home_Number").Value),
new XElement("Mobile_Number", (String)xelement.Element("Mobile_Number").Value)
);
}
}
}
但这就是我得到的结果 -
如您所见,只有第一个联系人显示正确,而其他两个则不正确。有人可以帮我解决这个问题吗?
private static XDocument GroupContactsByGroupField(XDocument doc)
{
var contacts = doc.Descendants("Contact").Select(x => new
{
FirstName = x.Element("First_Name").Value,
LastName = x.Element("Last_Name").Value,
Group = x.Element("Group").Value,
HomeNumber = x.Element("Home_Number").Value,
MobileNumber = x.Element("Mobile_Number").Value
});
var contactsGroupedByGroup = contacts.GroupBy(x => x.Group);
var newDoc = new XDocument(new XElement("Groups", contactsGroupedByGroup.Select(x =>
new XElement("Group", new XAttribute("Name", x.Key),
x.Select(y => new XElement("Contact",
new XElement("First_Name", y.FirstName),
new XElement("Last_Name", y.LastName),
new XElement("Home_Number", y.HomeNumber),
new XElement("Mobile_Number", y.MobileNumber)
))))));
return newDoc;
}
我正在尝试基于现有 XML 文件创建 XDocument 并将其与 TreeView 一起使用。我想按组元素对联系人进行分组。
XML 文件结构 -
<Contacts>
<Contact>
<First_Name>Ren</First_Name>
<Last_Name>Fuji</Last_Name>
<Group>Test</Group>
<Home_Number>Unavailable</Home_Number>
<Mobile_Number>Unavailable</Mobile_Number>
<Image></Image>
</Contact>
<Contacts>
这是创建 XDocument 对象的方法 -
static XDocument groupXDoc = new XDocument();
private static void CreateGroupsXML()
{
XElement root = new XElement("Groups");
groupXDoc.Add(root);
foreach (XElement xelement in xdoc.Element("Contacts").Elements("Contact").ToList())
{
String groupData = (String)xelement.Element("Group").Value;
XElement groups = new XElement("Group", new XAttribute("Name", groupData));
root.Add(groups);
if (groupXDoc.Root.Element("Group").FirstAttribute.Value == xelement.Element("Group").Value)
{
groups.Add(new XElement("First_Name", (String)xelement.Element("First_Name").Value),
new XElement("Last_Name", (String)xelement.Element("Last_Name").Value),
new XElement("Home_Number", (String)xelement.Element("Home_Number").Value),
new XElement("Mobile_Number", (String)xelement.Element("Mobile_Number").Value)
);
}
}
}
但这就是我得到的结果 -
如您所见,只有第一个联系人显示正确,而其他两个则不正确。有人可以帮我解决这个问题吗?
private static XDocument GroupContactsByGroupField(XDocument doc)
{
var contacts = doc.Descendants("Contact").Select(x => new
{
FirstName = x.Element("First_Name").Value,
LastName = x.Element("Last_Name").Value,
Group = x.Element("Group").Value,
HomeNumber = x.Element("Home_Number").Value,
MobileNumber = x.Element("Mobile_Number").Value
});
var contactsGroupedByGroup = contacts.GroupBy(x => x.Group);
var newDoc = new XDocument(new XElement("Groups", contactsGroupedByGroup.Select(x =>
new XElement("Group", new XAttribute("Name", x.Key),
x.Select(y => new XElement("Contact",
new XElement("First_Name", y.FirstName),
new XElement("Last_Name", y.LastName),
new XElement("Home_Number", y.HomeNumber),
new XElement("Mobile_Number", y.MobileNumber)
))))));
return newDoc;
}