2010-08-10 72 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 

所以,你只需要通过所有你感兴趣的元素循环,遍历每个元素中的属性,无论显示你需要。

相关问题