2010-08-10 62 views
0

我使用下面的XML結構如何動態地檢索其中一個xml節點的所有可能的屬性(可變屬性)值?

<SERVERS> 
<SERVER NAME="A1" ID="1"></SERVER> 
<SERVER NAME="A2"></SERVER> 
<SERVER NAME="A3" ID="3" Parent="XYZ"></SERVER> 
<SERVER NAME="A4" ID="4"></SERVER> 
<SERVER NAME="A5" Parent="abc" value="10"></SERVER> 
<SERVER NAME="A6"></SERVER> 
</SERVERS> 

我訪問該XML文件在asp.net使用LINQ to XML使用C#。我能夠通過顯式指定屬性的名稱來訪問XML節點的所有屬性。我想寫這個XML文件的查詢讀取XML節點的所有屬性值(在我們的例子中,節點是SERVER)動態地意味着我想寫的查詢,它可以讀取讀取屬性名稱的值& ID名稱,ID &第三行的父名稱&第四行的名稱,名稱,父母&第五行的值&僅第六行的名稱,而不是每次都修改現有代碼。一旦我在上面的xml文件中添加了一個屬性(例如,如果我在第六行添加屬性ID),那麼我不需要修改我的LINQ to XML查詢。我的查詢應該動態獲取顯示其值的屬性總數&。他們有什麼辦法做到這一點?你能否提供我可以解決上述問題的任何代碼或鏈接?

回答

0

以下代碼將打印出元素的所有屬性。

XDocument doc = XDocument.Load("file.xml"); 
foreach(var element in doc.Element("SERVER").Elements()) { 
    System.Diagnostics.Debug.WriteLine("Node " + element.Name.LocalName + ":"); 
    foreach(var attribute in element.Attributes()) { 
    System.Diagnostics.Debug.WriteLine(" " + attribute.Name.LocalName + ": " + attribute.Value); 
    } 
} 

對於這個XML:

<SERVER> 
<ServerInstance ID="101" Name="Server1"> 
<ServerInstance ID="102" Name="Server2"> 
<SERVER> 

它會打印出這樣的事情:

Node ServerInstance: 
    ID: 101 
    Name: Server1 
Node ServerInstance: 
    ID: 102 
    Name: Server2 
0

如果你只是使用XElement.Attributes()你會得到一個特定元素的所有屬性 - 你可以適當地循環它們。

示例代碼:

using System; 
using System.Xml.Linq; 

class Test 
{ 
    static void Main() 
    { 
     string xml = "<element attr1='Hello' attr2='there' />"; 
     XElement element = XElement.Parse(xml); 
     foreach (XAttribute attr in element.Attributes()) 
     { 
      Console.WriteLine("{0}={1}", attr.Name, attr.Value); 
     } 
    } 
} 

輸出:

attr1=Hello 
attr2=there 

所以,你只需要通過所有你感興趣的元素循環,遍歷每個元素中的屬性,無論顯示你需要。

相關問題