C# 按属性值选择节点
我有一个如下所示的XML:C# 按属性值选择节点,c#,linq-to-xml,C#,Linq To Xml,我有一个如下所示的XML: <TRANSFORMATION DESCRIPTION ="" NAME ="RTR_LRC_RF_REFL_Unproc" OBJECTVERSION ="1" REUSABLE ="NO" TYPE ="Router" VERSIONNUMBER ="1"> <GROUP DESCRIPTION ="" NAME ="INPUT" ORDER ="1" TYPE ="INPUT"/>
<TRANSFORMATION DESCRIPTION ="" NAME ="RTR_LRC_RF_REFL_Unproc" OBJECTVERSION ="1" REUSABLE ="NO" TYPE ="Router" VERSIONNUMBER ="1">
<GROUP DESCRIPTION ="" NAME ="INPUT" ORDER ="1" TYPE ="INPUT"/>
<GROUP DESCRIPTION ="" EXPRESSION ="EXP 1" NAME ="Good" ORDER ="2" TYPE ="OUTPUT"/>
<GROUP DESCRIPTION ="Path for the data when none of the group conditions are satisfied." NAME ="DEFAULT1" ORDER ="3" TYPE ="OUTPUT/DEFAULT"/>
<TRANSFORMFIELD DATATYPE ="integer" DEFAULTVALUE ="" DESCRIPTION ="" GROUP ="INPUT" NAME ="OWNER_HEORG_REFNO" PICTURETEXT ="" PORTTYPE ="INPUT" PRECISION ="10" SCALE ="0"/>
<TRANSFORMFIELD DATATYPE ="integer" DEFAULTVALUE ="" DESCRIPTION ="" GROUP ="INPUT" NAME ="PATNT_REFNO" PICTURETEXT ="" PORTTYPE ="INPUT" PRECISION ="10" SCALE ="0"/>
<TRANSFORMFIELD DATATYPE ="integer" DEFAULTVALUE ="" DESCRIPTION ="" GROUP ="INPUT" NAME ="REFRL_REFNO" PICTURETEXT ="" PORTTYPE ="INPUT" PRECISION ="10" SCALE ="0"/>
==============================================================================================
<GROUP DESCRIPTION ="" EXPRESSION ="(Valid_Record_Flag = 'Y'
<GROUP DESCRIPTION ="Path for the data when none of the group condition
<GROUP DESCRIPTION ="" EXPRESSION ="EXP2" .../>
<GROUP DESCRIPTION ="" EXPRESSION ="EXP3" .../>
<GROUP DESCRIPTION ="" EXPRESSION ="EXP4" .../>
但这会使所有TRANSFORMFIELD节点(包括组节点)的表达式属性只出现一次
如果组节点的EXPRESSION属性多次出现,如何获取TRANSFORMFIELD节点
非常感谢 我不能百分之百确定我是否理解您的要求,但我认为您只想获得
转换
的所有转换字段
,其中包含多个定义了表达式的组
元素。您可以这样做:
var query =
from transform in doc.Descendants("TRANSFORMATION")
where String.Equals((string)transform.Attribute("TYPE"), "router",
StringComparison.OrdinalIgnoreCase)
// GROUP elements that have more than one EXPRESSIONs defined
where transform.Elements("GROUP")
.Where(e => e.Attribute("EXPRESSION") != null)
.Skip(1).Any() // more than one
select transform.Elements("TRANSFORMFIELD");
var query =
from transform in doc.Descendants("TRANSFORMATION")
where String.Equals((string)transform.Attribute("TYPE"), "router",
StringComparison.OrdinalIgnoreCase)
// GROUP elements that have more than one EXPRESSIONs defined
where transform.Elements("GROUP")
.Where(e => e.Attribute("EXPRESSION") != null)
.Skip(1).Any() // more than one
select transform.Elements("TRANSFORMFIELD");