Xdocument получить атрибуты subelemnts с Linq - PullRequest
0 голосов
/ 11 августа 2011

У меня есть XML, как показано ниже, который я загружаю в XDocument

<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; }  
 }  

Теперь я хотел бы назначить LoopElements со значениями атрибута SegmentID и LoopUsage сзначения атрибута использования.Есть ли способ сделать это с помощью одного подзапроса?

1 Ответ

0 голосов
/ 11 августа 2011

Это то, что вы ищете?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...