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

如何不使用XPath读取嵌套XML节点?XmlDocument使用求助

解决方法

你的XML结构比较特殊:<DataElement>的文本内容是DocumentEntity="Borrower"|DataType="Table"|Value="..."这种分隔格式,其中Value部分嵌套了完整的XML字符串。需要先解析这个分隔文本提取出嵌套XML,再将其作为独立XML处理,才能读取每个Borrower节点的数据。

以下是结合XmlDocument的具体实现步骤:

步骤1:定位目标DataElement节点

先加载整个XML文档,找到Name="Borrower"的DataElement节点:

XmlDocument doc = new XmlDocument();
doc.LoadXml(yourXmlContent); // 替换为你的XML字符串或文件加载路径

XmlNode targetNode = doc.SelectSingleNode("//DataElement[@Name='Borrower']");
if (targetNode == null)
{
    // 处理节点不存在的异常情况
    return;
}

步骤2:解析文本内容,提取嵌套XML

targetNode.InnerText会返回节点内的分隔格式文本,需要按|拆分键值对,提取Value对应的XML内容并去除前后引号:

string rawContent = targetNode.InnerText.Trim();
string[] keyValuePairs = rawContent.Split('|');
string nestedXml = string.Empty;

foreach (string pair in keyValuePairs)
{
    string[] kv = pair.Split(new[] { '=' }, 2);
    if (kv.Length == 2 && kv[0].Trim() == "Value")
    {
        // 移除Value值前后的双引号
        nestedXml = kv[1].Trim().Trim('"');
        break;
    }
}

if (string.IsNullOrEmpty(nestedXml))
{
    // 处理未提取到嵌套XML的情况
    return;
}

步骤3:加载嵌套XML,读取Borrower节点

将提取到的嵌套XML加载为新的XML文档,就可以正常遍历每个Borrower节点及其字段:

XmlDocument borrowerDoc = new XmlDocument();
borrowerDoc.LoadXml(nestedXml);

// 获取Borrowers下的所有子节点(即Borrower1、Borrower2等)
XmlNodeList borrowerNodes = borrowerDoc.SelectNodes("//Borrowers/*");

foreach (XmlNode borrower in borrowerNodes)
{
    // 注意:你的Field节点内容是"Value=\"Value1\""格式,需提取实际值
    string field1 = borrower.SelectSingleNode("Field1").InnerText.Replace("Value=\"", "").Replace("\"", "");
    string field2 = borrower.SelectSingleNode("Field2").InnerText.Replace("Value=\"", "").Replace("\"", "");
    
    // 按需处理字段数据,比如输出
    Console.WriteLine($"{borrower.Name}: Field1={field1}, Field2={field2}");
}

可选:用LINQ to XML简化代码

如果使用XDocument(LINQ to XML),代码会更简洁:

XDocument mainDoc = XDocument.Parse(yourXmlContent);
var targetElement = mainDoc.Descendants("DataElement")
                           .FirstOrDefault(d => (string)d.Attribute("Name") == "Borrower");
if (targetElement == null) return;

string rawContent = targetElement.Value.Trim();
string nestedXml = rawContent.Split('|')
                             .First(p => p.StartsWith("Value="))
                             .Split('=')[1]
                             .Trim('"');

XDocument borrowerDoc = XDocument.Parse(nestedXml);
foreach (var borrower in borrowerDoc.Descendants("Borrowers").Elements())
{
    string field1 = borrower.Element("Field1").Value.Replace("Value=\"", "").Replace("\"", "");
    string field2 = borrower.Element("Field2").Value.Replace("Value=\"", "").Replace("\"", "");
    Console.WriteLine($"{borrower.Name}: Field1={field1}, Field2={field2}");
}

内容的提问来源于stack exchange,提问作者user1595214

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:55:14