You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#使用LINQ解析XML时,如何避免子节点值被拼接并单独获取每个参考编号

C#使用LINQ解析XML时,如何避免子节点值被拼接并单独获取每个参考编号

看起来你碰到了一个挺常见的LINQ to XML小坑——直接取<ReferenceNumbers>节点的Value时,它会把所有子节点的文本内容自动拼接在一起,而不是分别返回每个参考编号。别着急,咱们调整下代码逻辑就能搞定!

问题原因

XElement.Value的特性就是返回该节点下所有层级的文本内容的拼接结果,所以你拿到的自然是两个参考号连在一起的字符串了。咱们要做的不是取父节点的Value,而是遍历父节点下的每个子参考节点,单独获取它们的值。

修改后的代码

这里直接给你调整好的完整代码,你可以直接用:

public class Test
{
    public static void ParseXml(string xml)
    {
        var doc = XDocument.Parse(xml);
        List<KeyValuePair<string, string>> caseList = new List<KeyValuePair<string, string>>();
        var t = 1; 
        
        // 先定位到所有ReferenceNumbers节点(支持多个ReferenceNumbers块的情况)
        foreach (var refNumbersContainer in doc.Descendants("ReferenceNumbers"))
        {
            // 遍历每个ReferenceNumbers下的子节点(也就是各个ReferenceX)
            foreach (var refNode in refNumbersContainer.Elements())
            {
                caseList.Add(new KeyValuePair<string, string>(t.ToString(), refNode.Value));
                t++;
            }
        }

        // 输出结果
        foreach (var item in caseList)
        {
            Console.WriteLine(item);
        }
    }
    
    public static void Main()
    {
        ParseXml(@"<root>
<ReferenceNumbers>
        <Reference1>CN534786</Reference1>
        <Reference2>CN476587</Reference2>
   </ReferenceNumbers>
</root>");
    }
}

关键修改点说明

  • 新增了内层循环:先找到<ReferenceNumbers>容器节点,再遍历它的直接子元素(也就是<Reference1>、<Reference2>这些),这样每个子元素的Value就是单独的参考编号了。
  • 把原来的Insert(0, ...)改成了Add(...),这样结果顺序会和XML里的参考号顺序一致;如果你的业务需要倒序,再改回Insert就行。
  • 代码还支持XML里有多个<ReferenceNumbers>块的情况,比如如果有两组参考号,也能全部遍历到。

运行结果

修改后运行代码,就能得到你想要的输出:

[1, CN534786]
[2, CN476587]

额外提一句:如果你的XML里可能存在非参考编号的子节点,还可以加个过滤条件,只取名称以Reference开头的节点,比如:

foreach (var refNode in refNumbersContainer.Elements().Where(e => e.Name.LocalName.StartsWith("Reference")))

备注:内容来源于stack exchange,提问作者jwdickins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 10:33:07