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

C#中如何对比XML元素与子元素值并根据用户输入获取对应字段

嘿,我把你整理的需求、示例XML和已实现代码用清晰的Markdown格式梳理好了,方便你查看和分享:

需求与代码实现梳理

核心需求

我们需要实现一个XML数据匹配逻辑,具体规则如下:

  • 先匹配用户输入的DccCardIssueNumber(对应变量x),找到对应的<Card>节点
  • 检查该<Card>节点是否包含<SubType>子节点:
    • 如果存在<SubType>且用户提供了子类型编号y,则匹配对应的<DccCardIssueSubTypeNumber>,成功后获取<DccCardIssueSubTypeFullName>赋值给transaction.CardTypeName
    • 如果不存在<SubType>或未提供y,则直接获取该<Card>下的<DccCardIssuerFullName>赋值给transaction.CardTypeName

示例XML数据

<?xml version="1.0" encoding="utf-8" ?>
<CardTypes>
  <Card>
    <DccCardIssueNumber>99</DccCardIssueNumber>
    <DccCardIssuerName>VIS</DccCardIssuerName>
    <DccCardIssuerFullName>VISHAL</DccCardIssuerFullName>
    <RPOSCardType>1600</RPOSCardType>
    <DeliveryNote>false</DeliveryNote>
  </Card>
  <Card>
    <DccCardIssueNumber>20</DccCardIssueNumber>
    <DccCardIssuerName>VIS</DccCardIssuerName>
    <DccCardIssuerFullName>VISA</DccCardIssuerFullName>
    <RPOSCardType>1600</RPOSCardType>
    <DeliveryNote>false</DeliveryNote>
    <SubType>
      <DccCardIssueSubTypeNumber>1</DccCardIssueSubTypeNumber>
      <DccCardIssueSubTypeName>VIS</DccCardIssueSubTypeName>
      <DccCardIssueSubTypeFullName>VISA</DccCardIssueSubTypeFullName>
      <RPOSCardType>1600</RPOSCardType>
      <DeliveryNote>false</DeliveryNote>
    </SubType>
    <SubType>
      <DccCardIssueSubTypeNumber>2</DccCardIssueSubTypeNumber>
      <DccCardIssueSubTypeName>DKV</DccCardIssueSubTypeName>
      <DccCardIssueSubTypeFullName>DKV</DccCardIssueSubTypeFullName>
      <RPOSCardType>2510</RPOSCardType>
      <DeliveryNote>false</DeliveryNote>
    </SubType>
  </Card>
</CardTypes>

当前已实现的C#代码

using (XmlReader xr = XmlReader.Create("DccCardTypeMap.xml")) 
{ 
    while (xr.Read()) 
    { 
        if (xr.IsStartElement()) 
        { 
            switch (xr.Name.ToString()) 
            { 
                case "DccCardIssueNumber": 
                    if (y == "") 
                    { 
                        if (xr.ReadString() == x) 
                        { 
                            xr.ReadToFollowing("DccCardIssuerFullName"); 
                            transaction.CardTypeName = xr.ReadString(); 
                        } 
                    } 
                    else 
                    { 
                        if (xr.ReadString() == x) 
                        { 
                            xr.ReadToFollowing("DccCardIssueSubTypeNumber"); 
                            if (xr.ReadString() == y) 
                            { 
                                xr.ReadToFollowing("DccCardIssueSubTypeFullName"); 
                                transaction.CardTypeName = xr.ReadString(); 
                            } 
                        } 
                    } 
                    break; 
            } 
        } 
    } 
}

注:变量y表示子类型编号(如1或2),x表示用户输入的DccCardIssueNumber内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:14:25