繁体   English   中英

XML 属性值 C#

[英]XML Attribute Values C#

我正在尝试检索两个 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 调用中返回的值。

任何帮助表示赞赏

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

所以你得这样想..你现在解析出来的XElement是一个ResponseData对象,里面现在有一个Type对象的集合,每个Type对象都有一个valueid属性,这意味着你需要找到合适的为您要查找的每个值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}");

为什么不使用?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM