繁体   English   中英

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

[英]How to dynamically retrive the all the possible attributes (variable attributes) values of one of the xml node?

我正在使用以下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和ID的值第一个节点,仅第二行的名称,第三行的名称,ID和父级,第四行的名称和ID,第五行的名称,父级和值,第六行的名称,而无需每次都修改现有代码。 一旦在上述xml文件中添加了一个属性(例如,如果在第六行中添加了属性ID),则无需修改LINQ to XML查询。 我的查询应动态获取属性的总数并显示其值。 他们有什么办法吗? 您能提供解决上述问题的任何代码或链接吗?

如果仅使用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

因此,您只需要遍历所有感兴趣的元素,并遍历每个元素中的属性,即可显示所需的内容。

下面的代码将打印出元素的所有属性。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM