2011-12-11 42 views
1

我試圖讓從XNode我使用下面的代碼屬性獲得來自Xnode器不起作用

 XDocument document = XDocument.Load(FilePath); 

     var Elements = from p in document.Descendants(modality) select p.Elements("Key_Part"); 

     //var Attriputess = from p in document.Descendants(modality) select p.Attributes();  
     foreach (var Element in Elements) 
     { 

      foreach (var node in Element.Nodes()) 
      { 

       XmlReader reader = node.CreateReader(); 



       string a = reader.GetAttribute("Type"); 


      } 



     } 

一個總是等於空 XML類型這樣

<ShortcutList Version="8"> 
    <Doctor> 
    <Key_Part > 
     <Key1 Name = "XX" Type= "XXXXXXXXX" > rrrr</Key1> 
     <Key2 Name = "XasfsaX" Type= "XXXXsafasfXXXXX" > rrsfsfrr</Key1> 
    </Key_Part> 

我想得到鍵1,鍵2屬性和值

回答

1

我必須說,我已經修復,你在下面提供了工作之前查詢XML。所以你還沒有關閉最後兩個標籤,你已經關閉了Key2作者</Key1>標籤什麼是錯誤的XML。

試試以下,這將返回條目(每個鍵一個)的列表,其中匿名類型的每個條目與屬性:名稱,值,類型

var keys = xdoc.Descendants("ShortcutList") 
       .Descendants("Doctor") 
       .Descendants("Key_Part") 
       .DescendantNodes() 
       .OfType<XElement>() 
       .Where(d => d.Name.LocalName.Contains("Key")) 
       .Select(e => new { 
           Value = e.Value, 
           Name = e.Attribute("Name").Value, 
           Type = e.Attribute("Type").Value 
           }) 
       .ToList(); 

編輯:修正XML

<ShortcutList Version="8"> 
    <Doctor> 
    <Key_Part > 
     <Key1 Name = "XX" Type= "XXXXXXXXX" > rrrr</Key1> 
     <Key2 Name = "XasfsaX" Type= "XXXXsafasfXXXXX" > rrsfsfrr</Key2> 
    </Key_Part> 
</Doctor> 
</ShortcutList> 
+0

你是否修復了你的XML?看到我的答案的頂部 – sll

0

你需要確保讀者的元素,然後才能開始獲得屬性。但是,除非您有充分的理由這樣做,否則根本不需要XmlReader以獲取屬性值。

編輯追加請求的例子:

foreach (var a in document.Descendants(modality).Elements("Key_Part").Select(e => e.Attribute("Type").Value)) { 
    // the variable a is a string with the attribute value 
} 

或者這樣:

foreach (var attr in document.Descendants(modality).Elements("Key_Part").Attributes("Type")) { 
    string a = attr.Value; 
} 
+0

那麼如何獲得的屬性不說,給例如plesae – AMH

+0

使用[XElement.Attribute()](http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement。例如attribute.aspx)方法。 – Lucero

+0

很抱歉,但可以使用XML,請提供代碼,沒有Element.Attribute – AMH