2014-07-18 94 views
2

字典鑑於這種XML:從XML創建

<dataroot> 
    <TestTable> 
     <Tag>tag1</Tag> 
     <FName>t1</FName> 
    </TestTable> 
    <TestTable> 
     <Tag>tag2</Tag> 
     <FName>t2</FName> 
    </TestTable> 
    <TestTable> 
     <Tag>tag3</Tag> 
     <FName>t3</FName> 
    </TestTable> 
</dataroot> 

我怎樣才能將其加載到字典,因此當我擡頭「標籤3」,則返回「T3」?

我曾嘗試:

var doc = XDocument.Load("ConfigItems.xml"); 
Dictionary<string, string> ConfigItems; 
ConfigItems = doc.Descendants("TestTable").ToDictionary(v => v.Attribute("Tag").Value.ToString (), v => v.Attribute("FName").Value.ToString()); 

但我得到一個「對象引用不設置到對象的實例。」錯誤。

+0

你在哪裏得到的錯誤?你有什麼嘗試? – flindeberg

+0

您的XML無效 – DGibbs

+7

這些不是屬性,它們是元素。 –

回答

4

這些是not attributes, they are elements。這應該工作:

var doc = XDocument.Parse(s); 
Dictionary<string, string> ConfigItems; 
ConfigItems = doc.Descendants("TestTable") 
    .ToDictionary(v => v.Element("Tag").Value, 
       v => v.Element("FName").Value); 
var item = ConfigItems["tag3"]; 
Console.WriteLine(item); // "t3" 

的屬性會是這樣的:

<TestTable Tag="tag1" FName="t1" /> 
+0

是的,我的壞。只要我切換到元素,而不是屬性,它的作品。非常感謝你。 – Bobbit

+0

ToString是多餘的 –

+0

@ Selman22所以它是!我複製/粘貼OP的代碼而沒有仔細查看所有細節。我已經刪除它。 –