J'écris un simple analyseur de fichiers XML en utilisant LINQ to XML.Créer un graphe d'objet profond avec Linq to XML, refactoring?
Je souhaite avoir un objet TreeNode (c'est-à-dire une arborescence simple) pour chaque élément du fichier XML. Je veux que chaque élément soit fortement typé.
Il semble laid et redondant par rapport à la simple approche de bouclage que j'utilisais auparavant (en utilisant System.XML). Y a-t-il un moyen de supprimer les redondances ici?
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);
}
}
}
Vous devriez peut-être fournir le fichier exp.xml ou au moins quelques exemples de données afin que les utilisateurs puissent manipuler les données réelles. – Max