我的要求是每个商业广告代码中的每个role_type主要应该只有一个listingagent TAG。
<deal>
<commercial>
<party></party>
<party>
<role_detail>
<role_type>Primary</role_type>
</role_detail>
<listingagents>
<listingagent>1</listingagent>
<listingagent>2</listingagent>
</listingagents>
</party>
<party>
<role_detail>
<role_type>Secondary</role_type>
</role_detail>
<listingagents>
<listingagent>1</listingagent>
</listingagents>
</party>
<party></party>
</commercial>
<commercial>
</commercial>
<commercial>
</commercial>
</deal>
如果有多个我需要引发错误。
我尝试的代码如下
var duplicates = doc.Descendants("Commercial")
.Select(c => c.Descendants("listingAgent"))
.GroupBy(c => c.ToString())
.Where(g => g.Count() > 1)
.Select(g => g.First())
.ToList();
if (duplicates.Any(c => c.Count() > 1))
{
//show error
}
答案 0 :(得分:2)
如果您的约束条件是每个listingAgent
元素中只有一个commercial
元素,则非常简单:
var broken = doc.Descendants("commercial")
.Any(c => c.Elements("listingAgent").Count() != 1);
确保元素是唯一的。例如,根据该要求,这个XML很好:
<deals>
<commercial>
<listingAgent>1</listingAgent>
</commercial>
<commercial>
<listingAgent>1</listingAgent>
</commercial>
<commercial>
<listingAgent>1</listingAgent>
</commercial>
<deals>
此处的每个commercial
元素只有一个listingAgent
子元素。他们都有相同的价值,但这不是所述要求的一部分。如果你想要唯一性,那就是一个不同的要求 - 而且可以独立于listingAgent
个孩子的数量。例如,这符合唯一性,但不是&#34;恰好是一个孩子&#34;要求:
<deals>
<commercial>
<listingAgent>1</listingAgent>
<listingAgent>2</listingAgent>
</commercial>
<commercial>
</commercial>
<deals>