我需要为当前的xml提供包装器,我从中获取keyvalye对值。 这是我目前的代码:
string SID_Environment = "SID_" + EnvironmentID.ToString();
XDocument XDoc = XDocument.Load(FilePath_EXPRESS_API_SearchCriteria);
var Dict_SearchIDs = XDoc.Elements().ToDictionary(a => (string)a.Attribute("Name"), a => (string)a.Attribute("Value"));
string Search_ID = Dict_SearchIDs.Where(IDAttribute => IDAttribute.Key == SID_Environment).Select(IDAttribute => IDAttribute.Value).FirstOrDefault();
Console.WriteLine(Search_ID);
以下是我的示例xml:
<APIParameters>
<Parameter Name="SID_STAGE" Value="101198" Required="true"/>
<Parameter Name="SID_QE" Value="95732" Required="true"/>
</APIParameters>
请注意,此代码与示例xml一起正常工作,但在使用一些包装器修改我的xml后,我遇到了问题。 我需要为我的xml提供一些包装来修改我的样本xml,如下所示:
<DrWatson>
<Sets>
<Set>
<APIParameters>
<Parameter Name="SID_STAGE" Value="101198" Required="true"/>
<Parameter Name="SID_QE" Value="95732" Required="true"/>
</APIParameters>
</Set>
</Sets>
</DrWatson>
但是当我这样做并运行我的代码时,它会抛出一个错误。请建议。
答案 0 :(得分:1)
XDoc.Elements()仅返回直接子元素,而是使用后代。
var parameterElements = xDoc.Descendants("Parameter");
parameterElements.ToDictionary(a => (string)a.Attribute("Name"),
a => (string)a.Attribute("Value"));
答案 1 :(得分:0)
您需要以下内容:
var apiParams = doc.Descendants("APIParameters");
然后你可以修改你的代码:
var Dict_SearchIDs = apiParams.Elements().ToDictionary(a => (string)a.Attribute("Name"), a => (string)a.Attribute("Value"));