C#获取yaml文件中父节点buildRelease,并循环遍历该节点下所有子节点
时间: 2024-09-23 21:05:53 浏览: 43
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
在C#中,使用`YamlDotNet.Reading`库获取YAML文件中特定节点及其子节点通常涉及以下步骤:
首先,确保已如先前所述引入了必要的命名空间:
```csharp
using YamlDotNet.Reading;
using YamlDotNet.Reading.Model;
```
假设你想从名为`buildRelease`的父节点开始,我们可以创建一个递归函数来遍历其所有子节点:
```csharp
public class BuildReleaseNode
{
public string Name { get; set; }
public List<SubNode> SubNodes { get; set; } // 假设有一个名为SubNode的模型类
}
// 预先定义用于存储结果的列表
List<BuildReleaseNode> resultNodes = new List<BuildReleaseNode>();
private void TraverseYamlNode(YamlNode node, ref BuildReleaseNode parentNode)
{
if (node is MappingNode mappingNode)
{
foreach (KeyValuePair<string, YamlNode> pair in mappingNode.Children)
{
var childName = pair.Key;
var childValue = pair.Value;
// 检查是否是需要的buildRelease节点
if (childName == "buildRelease")
{
var buildReleaseNode = new BuildReleaseNode();
parentNode.SubNodes.Add(buildReleaseNode);
// 递归处理buildRelease下的子节点
TraverseYamlNode(childValue, ref buildReleaseNode);
}
else
{
// 如果不是,直接添加到当前parentNode的SubNodes中,或者作为普通属性处理
parentNode.AddProperty(childName, childValue); // 添加属性
}
}
}
else if (node is ScalarNode scalarNode)
{
// 对于简单值,可以直接设置为属性
parentNode.AddProperty(scalarNode.Tag, scalarNode.Value);
}
}
// 获取yaml文件并开始遍历
void ProcessYamlFile(string filePath)
{
var stream = File.OpenText(filePath);
var reader = new StreamReader(stream);
var parser = new Parser(reader);
var document = parser.Parse();
var root = document.Documents[0].RootNode;
// 初始化parentNode,这里是整个文档的根
var rootNode = new BuildReleaseNode();
TraverseYamlNode(root, ref rootNode);
// 结果现在存储在resultNodes列表中
// 对于每个BuildReleaseNode,你可以进一步操作或遍历其SubNodes
}
```
阅读全文