【发布时间】:2016-04-04 06:05:06
【问题描述】:
我有一个如下的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<files>
<file name="1">
<file name="4">
<file name="9">
</file>
</file>
</file>
<file name="2">
</file>
<file name="3">
<file name="5">
<file name="7">
</file>
</file>
<file name="6">
</file>
</file>
</files>
我想使用每个节点的级别为每个节点创建一个 id。
1
1,4
1,4,9
2
3
3,5
3,5,7
3,6
将其保存为列表。对于每个父级,列表中的条目如下:
0
1
1,4
1,4,9
1
2
2
3
3,5
3,5,7
3,6
我使用了以下代码:
using System;
using System.Linq;
using System.Xml.Linq;
class Test
{
static void Main()
{
var doc = XDocument.Load("test2.xml");
var hierarchy = doc.Descendants("file")
.Where(x => x.Element("file") == null)
.Select(x => x.AncestorsAndSelf("file")
.Reverse()
.Select(f => (int)f.Attribute("name"))
.ToList());
var step = hierarchy.Select(a => String.Join(", ", a));
}
}
这个函数可以称为展平 XML 文件中的嵌套节点/子节点。此代码仅生成最后一个节点的列表,就是这样(参见输出)。
1,4,9
2
3,5,7
3,6
但我更喜欢分别为每个节点设置一个地址/ID。
【问题讨论】:
-
您的输出似乎包含层次结构,但您正在创建一个平面列表。您希望如何表示该层次结构?目前尚不清楚您要达到的目标。
-
@JonSkeet 请查看编辑后的版本。
-
你需要一个返回给定节点路径的方法吗?或者您需要一个返回所有展平节点及其路径的方法?
-
@RezaAghaei,我需要一个返回所有扁平节点及其路径的方法。
-
使用递归方法。将级别传递给递归方法。请参阅以下网页:stackoverflow.com/questions/28976601/…