2011-08-11 39 views
0

屬性我有XML爲低於我加載到的XDocument的XDocument得到subelemnts使用LINQ

<ConversionSpecification xmlns="http://tempuri.org/X12ParserSpecification.xsd" TransactionSetIdentifierCode="837"> 
    <Loop LoopId="1000A" Name="SNAME" Identifier="NM1*41"> 
    <Segment SegmentId="NM1" Usage="R"/> 
    <Segment SegmentId="PER" Usage="R"/> 
    </Loop> 
    <Loop LoopId="1000B" Name="RNAME" Identifier="NM1*40"> 
    <Segment SegmentId="NM1" Usage="R"/> 
    </Loop> 
    <Loop LoopId="2000B" Name="SHLOOP" Identifier="22">  
    <Segment SegmentId="SBR" Usage="R"/> 
    <Segment SegmentId="PAT" Usage="S"/> 
    </Loop> 
</ConversionSpecification> 



XDocument document = XDocument.Load("Files/Loops.xml"); 
XNamespace ns = XNamespace.Get("http://tempuri.org/X12ParserSpecification.xsd"); 

var loopInfo = from loop in document.Descendants(ns + "Loop") 
       select new Loop 
       { 
        LoopID = loop.Attribute("LoopId").Value, 
        LoopIdentifier = loop.Attribute("Identifier").Value 
        LoopSegments = 
        LoopUsage = 
       }; 

其中,loop爲:

class Loop  
{ 
    public string LoopID { get; set; } 
    public string LoopIdentifier { get; set; } 
    public string[] LoopSegments { get; set; }   
    public string[] LoopUsage { get; set; } 
} 

現在我想用SegmentID屬性值分配LoopElements和具有使用屬性值的LoopUsage。有沒有辦法做到這一點與單個子查詢?

回答

0

這是你在追求什麼?

var loopInfo = from loop in document.Descendants(ns + "Loop") 
       select new Loop 
       { 
        LoopID = loop.Attribute("LoopId").Value, 
        LoopIdentifier = loop.Attribute("Identifier").Value, 
        LoopSegments = loop.Descendants(ns + "Segment").Select(s => s.Attribute("SegmentId").Value).ToArray(), 
        LoopUsage = loop.Descendants(ns + "Segment").Select(s => s.Attribute("Usage").Value).ToArray() 
       }; 

輸出看起來是這樣的:

enter image description here