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

C#读取XML:提取Object节点名称及十六进制script属性值

解决XElement读取所有节点及提取指定Property的问题

模拟XML结构(参考常见场景)

<Root>
  <Object name="Player">
    <Property name="script" value="0xA1B2C3"/>
    <Property name="health" value="100"/>
  </Object>
  <Object name="Enemy">
    <Property name="damage" value="20"/>
  </Object>
  <Object name="Item">
    <Property name="script" value="0xD4E5F6"/>
    <Property name="weight" value="5"/>
  </Object>
</Root>

正确的C#实现代码

using System;
using System.Linq;
using System.Xml.Linq;

class XmlProcessor
{
    static void Main()
    {
        // 替换为你的XML文件路径或内存中的XElement
        XElement xmlRoot = XElement.Load("your_target.xml");

        // 遍历所有<Object>节点
        foreach (XElement objNode in xmlRoot.Elements("Object"))
        {
            // 读取<Object>的name属性,处理属性不存在的情况
            string objectName = objNode.Attribute("name")?.Value ?? "Unnamed Object";
            Console.WriteLine($"Object: {objectName}");

            // 查找当前<Object>下名为"script"的<Property>子节点
            XElement scriptProperty = objNode.Elements("Property")
                .FirstOrDefault(prop => prop.Attribute("name")?.Value == "script");

            if (scriptProperty != null)
            {
                // 提取十六进制格式的value属性
                string hexValue = scriptProperty.Attribute("value")?.Value ?? "No value";
                Console.WriteLine($"  Script Hex: {hexValue}");
            }
            else
            {
                Console.WriteLine("  No script property present");
            }
            Console.WriteLine("---");
        }
    }
}

关键修复点

  • 替换xmlRoot.Element("Object")为xmlRoot.Elements("Object"):前者仅返回第一个匹配的节点,后者返回所有匹配节点,实现遍历
  • 用FirstOrDefault替代First查找:避免因找不到目标节点而抛出InvalidOperationException
  • 使用?.空值运算符:处理属性可能不存在的场景,防止空引用异常
  • 内容的提问来源于stack exchange,提问作者Daniel Román

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:20:11