0
我有一個XML結構是這樣的:挑戰:LINQ到轉換層次XML來鏈接對象
<?xml version="1.0" encoding="utf-8"?>
<categories version="2.0">
<category>
<name>cat1</name>
<category>
<name>cat 1.1</name>
</category>
<category>
<name>cat 1.2</name>
</category>
</category>
</categories>
我嘗試使用下面的代碼隱蔽這個XML對象:
XElement root = XDocument.Load(categoryXmlFile).Descendants("categories").First();
CategoryXml cat = new CategoryXml(root);
class CategoryXml
{
public string Name { get; set; }
public int Level { get; set; }
public int Order { get; set; }
public CategoryXml Parent { get; set; }
public List<CategoryXml> Children { get; set; }
CategoryXml() { }
public CategoryXml(XElement root)
{
Name = "Root Category";
Level = 0;
Order = 1;
Parent = null;
Children = GetSubCategories(root, Level, this);
}
private List<CategoryXml> GetSubCategories(XElement parentElement, int level, CategoryXml parentCategory)
{
int order = 1;
level++;
var s = from childElement in parentElement.Elements("category")
select new CategoryXml
{
Name = childElement.Element("name").Value,
Level = level,
Order = order++,
Parent = parentCategory,
Children = GetSubCategories(childElement, level, this)
};
return s.ToList();
}
}
然而,每個子類別的Parent屬性都會顯示「根類別」。相反,「cat 1.1」的Parent屬性應該說「cat1」。
我在這裏錯過了什麼?
喬恩,感謝您的回答。然而,當我嘗試你的代碼時,我得到了每個父母的空值。 – notlkk
明白了。只需添加Parent = parent;就是這樣。我愛你的解決方案。簡單而優雅。謝謝。 – notlkk
@notlkk:哎呀,是的,修好了。 –