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

如何从指定XML中提取追踪号?使用反射遇阻求技术指导

提取XML中追踪号的解决方案

方法一:直接用LINQ to XML解析(无需反射)

这是最直接高效的方式,无需依赖实体类或反射,直接定位目标节点即可:

using System.Xml.Linq;

// 你的XML内容
var xmlContent = @"<ShipmentHeader>
    <DocumentID>62017836-1</DocumentID>
    <DocumentReference type=""CustomerSuppliedReference"">
       <DocumentID>
          <ID>10532</ID>
       </DocumentID>
    </DocumentReference>
    <Status>
       <Code/>
       <Description languageID=""en-us""/>
    </Status>
    <ActualShipDateTime>2023-06-07T09:16:33-04:00</ActualShipDateTime>
    <ShippingMethod>CHEAPEST METHOD W/FIRST CLASS</ShippingMethod>
    <DocumentReference type=""TrackingNumber"">
       <TrackingNumber>9200190233107605458375</TrackingNumber>
    </DocumentReference>
 </ShipmentHeader>";

// 解析XML并提取追踪号
var doc = XDocument.Parse(xmlContent);
var trackingNumber = doc.Descendants("DocumentReference")
                        .FirstOrDefault(dr => dr.Attribute("type")?.Value == "TrackingNumber")
                        ?.Element("TrackingNumber")?.Value;

// 最终结果:9200190233107605458375

方法二:结合实体类与反射(若必须用反射)

如果你的场景确实需要用到反射,需先将XML序列化为实体对象,再通过反射获取目标属性:

1. 定义对应实体类

using System.Xml.Serialization;
using System.Collections.Generic;

[XmlRoot("ShipmentHeader")]
public class ShipmentHeader
{
    [XmlElement("DocumentReference")]
    public List<DocumentReference> DocumentReferences { get; set; } = new List<DocumentReference>();
}

public class DocumentReference
{
    [XmlAttribute("type")]
    public string Type { get; set; }

    [XmlElement("TrackingNumber")]
    public string TrackingNumber { get; set; }

    // 可添加其他对应XML节点的属性
}

2. 序列化XML并通过反射提取值

using System.Xml.Serialization;
using System.IO;

var serializer = new XmlSerializer(typeof(ShipmentHeader));
using var stringReader = new StringReader(xmlContent);
var shipment = (ShipmentHeader)serializer.Deserialize(stringReader);

// 遍历DocumentReferences,用反射获取目标属性
foreach (var docRef in shipment.DocumentReferences)
{
    if (docRef.Type == "TrackingNumber")
    {
        var trackingNumProp = docRef.GetType().GetProperty("TrackingNumber");
        var trackingNumber = trackingNumProp?.GetValue(docRef) as string;
        // 得到追踪号:9200190233107605458375
        break;
    }
}

注意

反射在这里并非必要操作,直接访问实体类属性的代码会更简洁易维护。只有在处理动态未知的实体结构时,反射才有实际意义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:55:02