我正在使用LINQ to XML編寫一個簡單的XML文件分析器。使用Linq to XML創建一個深層對象圖,重構?
我想爲XML中的每個元素都有一個TreeNode對象(即一個簡單的Tree結構)。我希望每個元素都是強類型的。
與我之前使用的簡單循環方法(使用System.XML)相比,它看起來很醜陋和多餘。有沒有辦法在這裏消除冗餘?
XElement ops = XElement.Load(@"c:\temp\exp.xml");
Tree<Element> domain = new Tree<Element>();
domain.Root = new TreeNode<Element>();
var cells =
from cell in ops.Elements("cell")
select new
{
TreeNodeObj = new TreeNode<Element>
(new Cell((string)cell.Attribute("name"), (string)cell.Attribute("name"), null)),
XElem = cell
};
foreach (var cell in cells)
{
domain.Root.AddChild(cell.TreeNodeObj);
var agents =
from agent in cell.XElem.Elements("agent")
select new
{
TreeNodeObj = new TreeNode<Element>
(new Agent((string)agent.Attribute("name"), (string)agent.Attribute("name"), null)),
XElem = agent
};
foreach (var agent in agents)
{
cell.TreeNodeObj.AddChild(agent.TreeNodeObj);
var nas =
from na in agent.XElem.Elements("node-agent")
select new
{
TreeNodeObj = new TreeNode<Element>
(new NodeAgent((string)na.Attribute("name"), (string)na.Attribute("name"), null)),
XElem = agent
};
foreach (var na in nas)
{
agent.TreeNodeObj.AddChild(na.TreeNodeObj);
}
}
}
也許你應該提供exp.xml或至少一些示例數據,以便人們可以篡改真實數據。 – Max 2009-10-26 09:20:57