2011-02-09 23 views
0
<Invoice type='Component' displayName='Invoice' pluralName='Invoices' Msgversion='1' version='1'> 
    <UserData type='SpecialElement'> 
    <Something /> 
    </UserData> 
    <From type='SpecialElement'> 
    <Something /> 
    </From> 
    <To type='SpecialElement'> 
    <Something /> 
    </To> 
    <CdtDbtNoteAmt type='xsd:decimal' /> 
    <PmtDueDt type='xsd:date' /> 
    <Adjstmnt> 
    <AdjAmt /> 
    <Rate /> 
    </Adjstmnt> 
    <CpyDplct type='PickList'> 
    <Item Text='Copy Duplicate' Value='CODU' /> 
    <Item Text='Copy' Value='COPY' /> 
    <Item Text='Duplicate' Value='DUPL' /> 
    </CpyDplct> 
    <InvItems type='ParentElement'> 
    <InvGd type='Element'> 
     <GdDesc type='xsd:decimal' /> 
     <QtyVl type='xsd:decimal' /> 
     <ChrgAmt type='xsd:decimal' /> 
     <PrceVl type='xsd:decimal' /> 
    </InvGd> 
    </InvItems> 
</Invoice> 

こんにちは、のLINQ - 問題の選択要素

私は子要素

  • がある

    • type属性がSpecialElementまたはピックリスト
    • ない要素を取得する必要があります親の型属性が親要素ではない

    したがって、XMLスニペットに基づいて、AdjstmnetおよびInvGd要素を取得したいと考えています。

    私が得ることができる最も近い

    var query = from n in xe.Elements() 
         let attributeType = n.Attribute("type").Value 
         where attributeType != "SpecialElement" 
         where attributeType != "PickList" 
         where n.HasElements 
         select n; 
    

    であるが、それはInvGd要素が含まれていません。

    変更/追加する必要があるアイデアはありますか?

    おかげで、

    デビッド

  • +0

    クラップエディタが私のXMLスニペットをmangledしました。スニペット全体を含めるようにしてインデントを維持するにはどうすればよいですか? – dlarkin77

    +0

    あなたは少し明確にする必要があります...例えば 'InvGd'とは何ですか?完全な小さな例と期待される出力を示してください。 –

    +0

    すみませんでした。 私は基本的に2つだけの要素を含むリスト、Adjstmnet要素 () とInvGd要素 (を取得する必要があります) – dlarkin77

    答えて

    1

    役立つはずxe.Descendants()代わりxe.Elements()のを使います。もちろん、親要素に関するチェックを追加する必要もあります。

    var query = from el in xe.Descendants() 
          let attType = (string)el.Attribute("type") 
          let parentType = (string).el.Parent.Attribute("type") 
          where attType != "SpecialElement" && attType != "PickList" 
            && el.HasElements 
            && parentType != "ParentElement" 
          select el 
    
    +0

    ありがとうございました。 – dlarkin77