按属性值选择节点

时间:2012-05-18 12:54:06

标签: 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"/>
              <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 = &apos;Y&apos; 
<GROUP DESCRIPTION ="Path for the data when none of the group condition
<GROUP DESCRIPTION ="" EXPRESSION ="EXP2" .../> 
<GROUP DESCRIPTION ="" EXPRESSION ="EXP3" .../> 
<GROUP DESCRIPTION ="" EXPRESSION ="EXP4" .../> 

我使用C#(LINQ to XML)从abocve XML获取一些信息。

在上面的XML中,您可以看到下面的节点。您还可以看到GROUP节点的EXPRESSION属性只出现一次。我还有其他节点集,它们也包含节点,但它们有多个EXPRESSION属性(=====分隔符下面的节点)。

我的要求是,我想从GROUP Nodes中提取一些信息,其EXPRESSION属性只出现一次。

我目前使用以下C#代码来提取信息:

 var q = from c in xmlDoc.Descendants("TRANSFORMATION")
                    where c.HasAttributes &&
                    c.Attribute("TYPE") != null && !String.IsNullOrEmpty(c.Attribute("TYPE").Value) &&
                    c.Attribute("TYPE").Value.ToUpper().Equals("ROUTER")

                    select c.Descendants("TRANSFORMFIELD");

但这会给所有TRANSFORMFIELD节点,包括具有EXPRESSION属性的GROUP节点只发生一次。

如何在具有EXPRESSION属性的GROUP节点出现多次的情况下获取TRANSFORMFIELD节点?

非常感谢!

1 个答案:

答案 0 :(得分:0)

我不是100%确定我理解您的要求,但我认为您只想获得包含多个TRANSFORMFIELD元素TRANSFORMATION的所有GROUP {1}}已定义。你可以这样做:

EXPRESSION