【问题标题】:XML Attribute Values C#XML 属性值 C#
【发布时间】:2020-05-20 16:12:35
【问题描述】:

我正在尝试检索两个 XML 属性的值并且很难使用 Xelement。 基本上,我得到一个 API 响应,它对两个不同的值使用相同的属性命名约定。

这是我在拨打电话后得到的回复。

    -<ResponseData>    
        <Type value="7" id="Level"/>    
        <Type value="67.80" id="Score"/>    
    </ResponseData>        

我想将这两个值设置为两个不同的变量。水平和分数。我有完整的代码,但是我不断收到空引用错误。

var xmlResponse = XElement.Parse(response);
var level = "";
var score = "";
if(xmlResponse.Attribute("id").Value == "Level")
{
    level = (string) xmlResponse.Attribute("value");
}

if(xmlResponse.Attribute("id").Value == "Score")
{
    score = (string) xmlResponse.Attribute("value");
}

我希望将我的两个变量设置为从 API 调用返回的值。

感谢任何帮助

【问题讨论】:

    标签: c# .net xml rest soap


    【解决方案1】:

    为什么不使用?

    -<ResponseData>    
        <Type Level="7" Score="67.80"/> 
    </ResponseData> 
    

    【讨论】:

    • 我希望我可以使用它。但是,它是我正在使用的第三方 API。这只是他们发送的响应。
    【解决方案2】:

    旁注,如果这是一个带有 WSDL 的 SOAP 服务,您是否尝试过让 Visual Studio 搭建它?

    所以你必须这样想......你现在解析的XElement是一个ResponseData对象,它现在有一个Type对象的集合,每个Type对象都有一个@987654325 @ 和 id 属性,这意味着您需要为要查找的每个值找到正确的 Type 条目。例如:

    string data = @"<ResponseData>    
            <Type value=""7"" id=""Level""/>    
            <Type value=""67.80"" id=""Score""/>    
        </ResponseData>";
    
    var xmlResponse = XElement.Parse(data);
    
    var levelElement = xmlResponse.Elements("Type")?
        .FirstOrDefault(x => x.Attribute("id")?.Value == "Level");
    var scoreElement = xmlResponse.Elements("Type")?
        .FirstOrDefault(x => x.Attribute("id")?.Value == "Score");
    
    int level;
    double score;
    
    level = int.Parse(levelElement?.Attribute("value")?.Value ?? "-1");
    score = double.Parse(scoreElement.Attribute("value")?.Value ?? "-1");
    
    Console.WriteLine($"Score {score}; Level {level}");
    

    【讨论】:

      【解决方案3】:

      我建议使用 powershell 知道如何使用的 XML。

      [xml]$xml = Get-Content C:\temp\xml.txt
      $TypeNode = $xml.SelectSingleNode("//Type[@id='Score']")
      $TypeNode.Attributes["value"].Value 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        • 2020-06-16
        • 1970-01-01
        • 2011-11-06
        • 1970-01-01
        相关资源
        最近更新 更多