如何动态检索其中一个xml节点的所有可能属性(变量属性)值?

时间:2010-08-10 06:26:00

标签: c# asp.net xml linq-to-xml dynamic-data

我使用以下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>

我通过使用C#在asp.net中使用LINQ to XML访问此xml文件。我可以通过显式指定属性的名称来访问XML节点的所有属性。我想在这个xml文件上写入查询,该文件读取xml节点的所有属性值(在我们的示例中节点是SERVER)动态意味着我想编写查询,该查询可以读取读取属性Name&amp;的值。第一个节点的ID,第二个节点的名称,名称,ID&amp;来自第三行的父母姓名&amp;第四行的ID,姓名,父母和第五排和第五排的价值仅限第六行中的名称,而不是每次都修改现有代码。一旦我在上面的xml文件中添加了一个属性(例如,如果我在第六行中添加属性ID),那么我就不需要修改我的LINQ to XML查询。我的查询应该动态获取属性的总数&amp;显示他们的价值观他们有办法做到这一点吗?您能否提供我可以解决上述问题的任何代码或链接?

2 个答案:

答案 0 :(得分: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

所以你只需要遍历你感兴趣的所有元素,然后遍历每个元素中的属性,显示你需要的任何内容。

答案 1 :(得分: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