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

从API返回的XML提取含PAN的信用卡数据失败,寻求解决方案

提取XML中PAN相关信用卡数据的解决方案

问题背景

从API获取的信用卡信息XML数据如下:

<?xml version="1.0" encoding="ISO-8859-9"?>
<CC5Response>
  <ProcReturnCode>00</ProcReturnCode>
  <Response>Approved</Response>
  <Extra>
    <PAN1LABEL>PRICE</PAN1LABEL>
    <PAN2INDEXORDER>1</PAN2INDEXORDER>
    <PAN2STATUS>NO</PAN2STATUS>
    <SAFEKEYLASTMODIFIED>11/22/333</SAFEKEYLASTMODIFIED>
    <PAN2INDEXACCOUNTCLOSURE>00</PAN2INDEXACCOUNTCLOSURE>
    <PAN1STATUS>NO</PAN1STATUS>
    <PAN1INDEXACCOUNTCLOSURE>00</PAN1INDEXACCOUNTCLOSURE>
    <PAN2EXPIRY>00.1111</PAN2EXPIRY>
    <PAN1OWNER>JOHN DAVIS</PAN1OWNER>
    <PAN2LABEL>PRODUCT BUY</PAN2LABEL>
    <PAN2DESCRIPTION>DESCRIPION</PAN2DESCRIPTION>
    <PAN1>1111 22** **** 3333</PAN1>
   <PAN2>1111 22** **** 3333</PAN2>
    <PAN2OWNER>JOHN DAVIS</PAN2OWNER>
    <PAN1EXPIRY>02.2025</PAN1EXPIRY>
    <NUMBEROFPANS>3</NUMBEROFPANS>
    <PAN1INDEXORDER>1</PAN1INDEXORDER>
    <PAN1DESCRIPTION>PRODUCT NO</PAN1DESCRIPTION>
  </Extra>
</CC5Response>

需要提取所有名称包含PAN的节点数据用于展示,但之前的两段C#代码均未成功:

第一段失败代码

List<string> list = new List<string>();
list.add(responseFromServer); //"responseFromServer" data from api
string[] getPanArray = list.ToArray();
List<string> panlist = new List<string>();
string pan = "PAN";
foreach (var item in getPanArray)
{
    if (item.Contains(pan))
    {
       panlist.Add(item);
    }
 }

第二段失败代码

List<string> list = new List<string>();
list.Add(responseFromServer);
String[] test = list.ToArray();
String text = "PAN";
String[] result = test.Where(s =>
     {
       Boolean isInThere = true;
       Char[] textArray = text.ToCharArray();
        foreach (Char c in textArray)
        {
           if (!s.Contains(c))
                    isInThere = false;
         }
           return isInThere;
       }).ToArray();

代码失败原因

两段代码的核心问题都是把完整XML字符串当成单个元素处理:

  • 第一段代码将整个XML加入列表,遍历仅判断整个字符串是否包含PAN,最终只会把完整XML加入结果列表,无法提取单个PAN节点。
  • 第二段代码逻辑错误,检查字符串是否包含PAN的每个字符,同样因为整个XML满足条件,返回的还是完整XML,没有拆分节点。

正确解决方案

不要把XML当纯文本处理,使用C#内置的XML解析类(如XDocument)来解析结构,精准提取目标节点:

using System;
using System.Collections.Generic;
using System.Xml.Linq;

// 假设responseFromServer是从API获取的XML字符串
string responseFromServer = "你的XML数据";

// 加载XML文档
XDocument xmlDoc = XDocument.Parse(responseFromServer);

// 筛选所有名称包含"PAN"的元素
var panElements = xmlDoc.Descendants()
                        .Where(element => element.Name.LocalName.Contains("PAN"));

// 将结果整理为键值对(节点名称: 节点值)
Dictionary<string, string> panCardData = new Dictionary<string, string>();
foreach (var element in panElements)
{
    panCardData.Add(element.Name.LocalName, element.Value);
}

// 示例:遍历输出所有PAN相关数据
foreach (var kvp in panCardData)
{
    Console.WriteLine($"{kvp.Key}: {kvp.Value}");
}

方案说明

  1. XML解析类:XDocument能正确识别XML的层级结构,避免纯文本处理时的换行、空格等干扰问题。
  2. 节点筛选:Descendants()遍历所有子节点,通过Where条件筛选名称包含PAN的元素。
  3. 结果整理:将节点名称和值存入字典,方便后续在页面上展示(可根据需求转换为自定义实体类)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:01:08