[英]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
对象都有一个value
和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}");
为什么不使用?
-<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.