2011-08-11 82 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