2013-07-28 130 views
4

這是一個示例XML我只需要Nid的屬性IEnumerable的<XAttribute>被返回null,需要返回屬性值

<Server> 
    <Network Nid="43d5377-0dcd-40e6-b95c-8ee980b1e248"> 
    <Client_Group id="20">963440d0-96dc-46a4-a54d-7251a65f585f</Client_Group> 
    <ClientID id="20">3fc8ffa1-c16b-4d7b-9e55-1e88dfe15277</ClientID> 
<Server> 

這是IEnumerable的爲XAttributes這樣我們就可以使用LINQ查詢一個屬性XML文檔,使用XElement訪問XML文件。由於某些原因,這返回Null,它需要返回屬性名稱「Nid」的屬性。

XElement main = XElement.Load(fi.FullName); 

IEnumerable<XAttribute> successAttributes = 
       from attribute in main.Attributes() 
       where attribute.Name.LocalName == "Nid" 
       select attribute; 

這是我的陣列

foreach (string attribute in successAttributes) 
       { 
        for (int i = 0; i < IntializedPorts.Count(); i++) 
        { 
         //running Intialization 
         IntializedNetworks[i] = attribute.ToString(); 
        } 
       } 
+0

你的意思是'successAttributes的== null'? –

+0

它的返回null導致一些不正確的查詢 – shawn

+0

我剛剛添加了XElement的fi.Fullname是XML文檔的路徑 – shawn

回答

0

這可能會幫助你。一切你寫的代碼是正確的,你只願意使用main.Element("Network").Attributes()不是main.Attributes()

IEnumerable<XAttribute> successAttributes = 
       from attribute in main.Element("Network").Attributes() 
       where attribute.Name.LocalName == "Nid" 
       select attribute; 

代表這個問題,我寫了下面的示例程序,這將產生預期的NID值

string strVal = "<Server><Network Nid=\"43d5377-0dcd-40e6-b95c-8ee980b1e248\"/><Client_Group id=\"20\">963440d0-96dc-46a4-a54d-7251a65f585f</Client_Group><ClientID id=\"20\">3fc8ffa1-c16b-4d7b-9e55-1e88dfe15277</ClientID></Server>"; 

      XElement main = XElement.Load(new StringReader(strVal)); 

      IEnumerable<XAttribute> successAttributes = 
       from attribute in main.Element("Network").Attributes() 
       where attribute.Name.LocalName == "Nid" 
       select attribute; 
+0

謝謝,先生,大聲笑我知道我錯過了某些東西,我有感覺是它只是缺少文字中的某些東西,我無法把它放在手指上 – shawn

0

main在執行LINQ查詢得到的屬性代替他們在這裏是根元素:<Server> - 這不具有Nid屬性。

你想要的東西,如:

Guid nid = (Guid)main.Element("Network").Attribute("Nid"); 

或者多個:

Guid[] arr = (from attr in main.DescendentsOrSelf().Attributes("Nid") 
       select (Guid)attr).ToArray(); 
+0

是的,但是這會從多個XML文件中獲取所有Nid ID,GUID也可以被讀爲字符串 – shawn

+0

@shawn您不清楚您指的是什麼「多個XML文件」。是的,我可以把guid看成一個字符串 - 但如果它實際上是一個guid,那麼使用guid會更自然 - 但這是主觀的。 –

+0

實際上我的意思是如果我有多個Nid Id的如何在數組中實現導致Xattributes我正在使用Enumerable獲取多個Nid Id的原因我只在我的xml中顯示一個xml是示例 – shawn