c# - XML.Linq-根据另一个值获取值

标签 c# xml linq

我正在尝试使用Linq to XML从基于另一个值的xml中提取一个值。

这是我的xml

<Lead>
<ID>1189226</ID>
<Client>
    <ID>8445254</ID>
    <Name>City of Lincoln Council</Name>
</Client>
<Contact>
    <ID>5747449</ID>
    <Name>Fred Bloggs</Name>
</Contact>
<Owner>
    <ID>36612</ID>
    <Name>Joe Bloggs</Name>
</Owner>
<CustomFields>
    <CustomField>
      <ID>31961</ID>
      <Name>Scotsm_A_n_Authority_Good</Name>
      <Boolean>true</Boolean>
    </CustomField>
    <CustomField>
      <ID>31963</ID>
      <Name>Scotsma_N_Need Not Want</Name>
      <Boolean>false</Boolean>
    </CustomField>
 </CustomFields>




因此,例如,我想尝试在<Boolean>中获取<CustomField>的值,其中<Name>等于"Scotsm_A_n_Authority_Good"应为"true"

我尝试了以下方法:

var xmlAnswers = xe.Element("CustomFields").Element("CustomField").Element("Scotsm_A_n_Authority_Good");


但我得到一个错误,说:

The ' ' character, hexadecimal value 0x20, cannot be included in a name...


有人可以帮忙吗?

最佳答案

您目前正在寻找错误的事物。您应该在CustomField元素中查找具有指定值的Name元素:

string target = "Scotsm_A_n_Authority_Good"; // Or whatever
var xmlAnswers = xe.Element("CustomFields")
                   .Elements("CustomField")
                   .Where(cf => (string) cf.Element("Name") == target);


这将为您提供所有匹配的CustomField元素。然后,您可以使用以下内容获取Boolean值:

foreach (var answer in xmlAnswers)
{
    int id = (int) answer.Element("ID");
    bool value = (bool) answer.Element("Boolean");
    // Use them...
}


(您当然可以在LINQ查询中提取ID和值...)

关于c# - XML.Linq-根据另一个值获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37271680/

相关文章:

C#根据特定的结构成员值从数组中获取结构

c# - 下载时更新对话框表单

c# - NHibernate 无意的延迟属性加载

c# - 如何在 Linq to Sql 的插入或更新中使用 where 子句?

c# - SqlFunctions.StringConvert 不适用于 double

java - 从spring config调用静态方法

c# - SC 删除 <服务> 不起作用

c# - 如何以精确的高度绘制给定的字符?

ruby-on-rails - 将 XML 文档导入 Rails 数据库?

Objective-C 创建动态对象