从 XML 标记 C# LINQ 中提取键值

Posted

技术标签:

【中文标题】从 XML 标记 C# LINQ 中提取键值【英文标题】:Extracting Key value from XML tags C# LINQ 【发布时间】:2021-11-07 22:58:45 【问题描述】:
void Main()

    string xml = @"<root>                 
<Page1>
<Key_Head>Name1</Key_Head>
<Key_Title>value1</Key_Title>
</Page1>
<Page1>
<Key_Head>Name2</Key_Head>
<Key_Title>value2</Key_Title>
</Page1>
</root>";
    var doc1 = XDocument.Parse(xml);
    var result = ConvertXmlToDic(doc1.Root);


private static List<NameValuePair> ConvertXmlToDic(XElement element)

    var result =
        element
            .Elements()
            .Select(e => new
            
                Name = e.Name.ToString(),
                Value = (e.Descendants().Count() == 0)
                ? e.Value
                : ConvertXmlToDic(e).ToString()
            )
            .ToDictionary(e => e.Name, e => e.Value)
            .Select(e => new List<NameValuePair>()
            
                new NameValuePair()  Name = e.Key, Value = e.Value 
            );
    return (List<NameValuePair>)result;

如何获取 Name1value1 的标签值作为键值。喜欢 (Name1,Value1) 的列表吗?这是我迄今为止尝试过的。

【问题讨论】:

【参考方案1】:

您可以简化检索Key_HeadKey_Title 的逻辑,如下所示:

private static List<NameValuePair> ConvertXmlToDic(XElement element)

    var result = element.Elements()
        .Select(e => new NameValuePair
                
                    Name = e.Element("Key_Head").Value, 
                    Value = e.Element("Key_Title").Value
                )
        .ToList();
    return result;

输出

名称:名称1,值:值1

名称:name2,值:value2

Sample program

【讨论】:

以上是关于从 XML 标记 C# LINQ 中提取键值的主要内容,如果未能解决你的问题,请参考以下文章

无法从具有数组和结构的 BigQuery 表中提取键值对

[677]. 键值映射

[677]. 键值映射

C#正则表达式提取多个结构键值

如何使用linq从字典中获取嵌套键值对[重复]

在 C# 中使用 Linq 从 XML 获取属性和属性