<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>
您好,
我需要获取元素
因此,根据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 :(得分: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