0

以下のような 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) を使用して、上記の XML から情報を取得します。

上記の XML では、 の下にノードが表示されます。また、GROUP ノードの EXPRESSION 属性が 1 回だけ発生していることもわかります。他のノードのセットもあり、ノードも含まれていますが、複数の EXPRESSION 属性があります (===== 分割線の下のノード)。

私の要件は、一度だけ発生する EXPRESSION 属性を持つ GROUP ノードからいくつかの情報を抽出したいということです。

現在、次の 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");

ただし、これにより、EXPRESSION 属性を持つ GROUP ノードを含むすべての TRANSFORMFIELD ノードが 1 回だけ発生します。

EXPRESSION 属性を持つ GROUP ノードが複数回出現する TRANSFORMFIELD ノードを取得するにはどうすればよいですか?

どうもありがとう!

4

1 に答える 1

0

私はあなたの要件を100%理解しているとは確信していませんが、定義された複数の要素を含むすべてTRANSFORMFIELDを取得したいだけだと思います。あなたはこれを行うことができます:TRANSFORMATIONGROUPEXPRESSION

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");
于 2012-05-20T04:04:21.917 に答える