我使用以下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;显示他们的价值观他们有办法做到这一点吗?您能否提供我可以解决上述问题的任何代码或链接?
答案 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