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

如何在C# UWP中从复杂XML文档获取指定属性值

在C# UWP中从XML文档获取指定属性值的解决方案

我来帮你搞定这个问题,你的代码里有几个小问题导致无法正常运行,咱们一步步来修正:

你的代码存在的问题

  • 首先,skundename的查询结果是IEnumerable<string>(因为你最后select的是属性的Value字符串),但你在foreach里把它当成XElement来处理,类型不匹配,这会直接报错。
  • 其次,foreach内部的代码完全多余——你已经在之前的查询中拿到了目标值,没必要再次重复查询。
  • 另外,读取XML的方式可以更高效,没必要先把整个文件读成字符串再解析,XDocument可以直接加载流。

修正后的完整代码

假设你已经定义了公共字符串变量public string temp { get; set; },下面是可以正常运行的代码:

public async Task GetDataAsync()
{
    StorageFile file = await StorageFile.GetFileFromPathAsync(PathforNeutralFilterDatei);
    using (IRandomAccessStreamWithContentType stream = await file.OpenReadAsync())
    {
        // 直接从流加载XML,无需先读成字符串
        XDocument doc = XDocument.Load(stream.AsStream());
        
        // 查找ID为"S_Kunde_Firma"的Property元素,获取其Value属性值
        var targetProperty = doc.Descendants("Property")
                                .FirstOrDefault(p => p.Attribute("ID")?.Value == "S_Kunde_Firma");
        
        // 检查是否找到目标元素,避免空引用异常
        if (targetProperty != null)
        {
            temp = targetProperty.Attribute("Value")?.Value;
        }
        else
        {
            // 没找到的话可以设置默认值或者抛出提示
            temp = string.Empty;
        }
    }
}

代码说明

  1. 使用using语句管理流资源,确保操作完成后自动释放资源,避免内存泄漏。
  2. 用FirstOrDefault代替LINQ查询的集合枚举,因为你只需要获取唯一匹配的那个属性值,这样更简洁高效。
  3. 使用?.空条件运算符,避免当属性不存在时抛出空引用异常,让代码更健壮。
  4. 直接将找到的Value属性值赋值给公共变量temp,无需多余的循环操作。

另一种更简洁的写法(直接获取值)

如果确定目标元素一定存在,也可以用更短的链式调用:

temp = doc.Descendants("Property")
          .First(p => p.Attribute("ID").Value == "S_Kunde_Firma")
          .Attribute("Value").Value;

不过这种写法在元素或属性不存在时会抛出异常,建议还是用带空检查的版本更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:12:18