我試圖找到一種將XML封裝到C#類的優雅方式。環顧四周,我發現了一個Java示例(不要問我在哪裏)引發了一個想法,但我不確定在C#中甚至有可能以正確的方式開展工作。封裝嵌套的XML
我目前使用的那種不雅的方法是通過XPathNodeIterator/XPathNavigator節點遍歷一系列嵌套的switch語句,這些語句指示找到合適的節點後該怎麼做,還列出了未處理的任何節點。我嘗試的更優雅的方法涉及使用助手類來完成迭代的大部分,並且基本上需要一個節點名稱以及在遇到該節點時執行的操作。這個類看起來像目前這樣(注意,這是理論上的,請參閱以下原因):
class XmlNodeIterator
{
public XmlNodeIterator(XPathNodeIterator node, Dictionary<string, Action> children)
{
foreach (XPathNavigator childNode in node.Current.SelectChildren(XPathNodeType.Element))
{
Action child = null;
try
{
child = children[childNode.LocalName];
}
catch (KeyNotFoundException e)
{
// Log the warning in some fashion
}
if (child != null)
child.Invoke();
}
}
}
之前,我甚至驗證的概念測試,我發現了一個問題的理念。 :)如何訪問委託函數中的內部childNode(例如,childNode.Value或childNode.GetAttribute)並將其分配給外部變量或屬性?
對於代表們來說,我還是很新的,所以我不知道這是否可能。如果是,太棒了!如果沒有,我還可以嘗試其他優雅的解決方案嗎?或者我應該堅持嵌套開關?
這就是我一直在尋找的東西,現在我已經掌握了它,看起來這個概念也會起作用。謝謝! – RobinHood70 2010-11-25 07:26:43