Linq到XML在循环中读取XMLDocument

本文关键字:读取 XMLDocument 循环 XML Linq | 更新日期: 2023-09-27 18:29:49

有人能帮助我阅读此XML并循环通过<MedicationDispensed>

我在XMLDocument xdoc(一个动态响应)中得到了这个XML

    <Message xmlns="http://www.xxxx.org/schema/SCRIPT" version="008" release="001">
      <Header>
        <To Qualifier="ZZZ">T00000000021261</To>
        <From Qualifier="ZZZ">T00000000001000</From>
        <MessageID>1333375137258</MessageID>
        <RelatesToMessageID>19553495</RelatesToMessageID>
        <SentTime>2012-04-02T13:58:52</SentTime>
        <Security>
          <UsernameToken>
            <Username />
          </UsernameToken>
          <Sender>
            <SecondaryIdentification>JILITTQQPK</SecondaryIdentification>
            <TertiaryIdentification>RXHUB</TertiaryIdentification>
          </Sender>
          <Receiver>
            <SecondaryIdentification></SecondaryIdentification>
            <TertiaryIdentification />
          </Receiver>
        </Security>
        <Mailbox>
          <DeliveredID></DeliveredID>
        </Mailbox>
        <TestMessage>1</TestMessage>
      </Header>
      <Body>
        <RxHistoryResponse>
          <RxReferenceNumber>POCDH1</RxReferenceNumber>
          <PrescriberOrderNumber>POCDH1</PrescriberOrderNumber>
          <Response>
            <Approved />
          </Response>
          <Prescriber>
            <Identification>
              <NPI>xxxxxxxxx</NPI>
              <DEANumber>xxxxxx</DEANumber>
            </Identification>
            <Name>
              <LastName>xxxxxx</LastName>
              <FirstName>xxxxxxx</FirstName>
            </Name>
            <PhoneNumbers>
              <Phone>
                <Number>xxxxx</Number>
                <Qualifier>TE</Qualifier>
              </Phone>
            </PhoneNumbers>
          </Prescriber>
          <Patient>
            <PatientRelationship>1</PatientRelationship>
            <Name>
              <LastName>Schnur</LastName>
              <FirstName>Bert</FirstName>
              <MiddleName>L</MiddleName>
            </Name>
            <Gender>M</Gender>
            <DateOfBirth>1945-10-19</DateOfBirth>
          </Patient>
          <BenefitsCoordination>
            <PayerIdentification>
              <PayerID>PBM123</PayerID>
            </PayerIdentification>
            <PayerName>INSURANCE COMPANY NAME</PayerName>
            <CardholderID>MEMBERID</CardholderID>
            <CardholderName>PALTROW, BRUCE</CardholderName>
            <GroupID>B000000</GroupID>
            <Consent>Y</Consent>
            <PBMMemberID>B000000%111111110%001</PBMMemberID>
          </BenefitsCoordination>
          <MedicationDispensed>
            <DrugDescription>OXYCODONE W/APAP 5/325 TAB</DrugDescription>
            <DrugCoded>
              <ProductCode>00406051205</ProductCode>
              <ProductCodeQualifier>ND</ProductCodeQualifier>
            </DrugCoded>
            <Quantity>
              <Qualifier>00</Qualifier>
              <Value>60.0</Value>
              <CodeListQualifier>87</CodeListQualifier>
            </Quantity>
            <DaysSupply>15</DaysSupply>
            <LastFillDate>2012-04-02</LastFillDate>
            <Pharmacy>
              <Identification>
                <NCPDPID>1234567</NCPDPID>
              </Identification>
              <StoreName>WALGREENS #00000</StoreName>
              <Address>
                <AddressLine1>1 CENTRAL STREET</AddressLine1>
                <City>INDIANAPOLIS</City>
                <State>IN</State>
                <ZipCode>46201</ZipCode>
              </Address>
              <PhoneNumbers>
                <Phone>
                  <Number>8005551212</Number>
                  <Qualifier>TE</Qualifier>
                </Phone>
              </PhoneNumbers>
            </Pharmacy>
            <Prescriber>
              <Identification>
                <DEANumber>KR4184999</DEANumber>
              </Identification>
              <Name>
                <LastName>SMITH</LastName>
                <FirstName>JOHN</FirstName>
                <MiddleName>E</MiddleName>
              </Name>
              <Address>
                <AddressLine1>MERCY CLINIC</AddressLine1>
                <City>ST. PAUL</City>
                <State>MN</State>
                <ZipCode>55101</ZipCode>
              </Address>
            </Prescriber>
          </MedicationDispensed>
          <MedicationDispensed>
            <DrugDescription>HUMULIN 70/30 VIAL</DrugDescription>
            <DrugCoded>
              <ProductCode>00002871501</ProductCode>
              <ProductCodeQualifier>ND</ProductCodeQualifier>
            </DrugCoded>
            <Quantity>
              <Qualifier>00</Qualifier>
              <Value>10.0</Value>
              <CodeListQualifier>87</CodeListQualifier>
            </Quantity>
            <DaysSupply>30</DaysSupply>
            <LastFillDate>2012-04-01</LastFillDate>
            <Pharmacy>
              <Identification>
                <NCPDPID>1234567</NCPDPID>
              </Identification>
              <StoreName>WALGREENS #00000</StoreName>
              <Address>
                <AddressLine1>1 CENTRAL STREET</AddressLine1>
                <City>INDIANAPOLIS</City>
                <State>IN</State>
                <ZipCode>46201</ZipCode>
              </Address>
              <PhoneNumbers>
                <Phone>
                  <Number>8005551212</Number>
                  <Qualifier>TE</Qualifier>
                </Phone>
              </PhoneNumbers>
            </Pharmacy>
            <Prescriber>
              <Identification>
                <DEANumber>KR4184999</DEANumber>
              </Identification>
              <Name>
                <LastName>SMITH</LastName>
                <FirstName>JOHN</FirstName>
                <MiddleName>E</MiddleName>
              </Name>
              <Address>
                <AddressLine1>MERCY CLINIC</AddressLine1>
                <City>ST. PAUL</City>
                <State>MN</State>
                <ZipCode>55101</ZipCode>
              </Address>
            </Prescriber>
          </MedicationDispensed>
         Loop Continues
<MedicationDispensed>
<DrugDescription>OXYCODONE W/APAP 5/325 TAB</DrugDescription>
            <DrugCoded>
              <ProductCode>00406051205</ProductCode>
              <ProductCodeQualifier>ND</ProductCodeQualifier>
            </DrugCoded>
            <Quantity>
              <Qualifier>00</Qualifier>
              <Value>60.0</Value>
              <CodeListQualifier>87</CodeListQualifier>
            </Quantity>
            <DaysSupply>15</DaysSupply>
            <LastFillDate>2012-04-02</LastFillDate>
          <Pharmacy>
             ....Pharmacy Details
          </Pharmacy>
         <Prescriber>
             ... Prescriber Details
          </Prescriber>
        </MedicationDispensed>
        </RxHistoryResponse>
      </Body>

我需要读取<MedicationDispensed>的循环中数据我想通过Linq实现XML

有谁能给我一个好的开始吗?

解决方案

我使用这个链接得到了我的解决方案

@Flowerking给了我一个良好的开端。

Linq到XML在循环中读取XMLDocument

试试这个

XNamespace ns = "http://www.xxxx.org/schema/SCRIPT";
foreach(var elms in xdoc.Descendants(ns + "MedicationDispensed").Elements())
{
     Console.WriteLine(elms.Name + ":" + elms.Value.ToString());
}

如果你有嵌套的元素,那么你需要分别迭代它们,

foreach(var elms in xdoc.Descendants("MedicationDispensed").Elements())
{
    if(elms.HasElements)
    {
        foreach (var element in elms.Elements())
        {
            Console.WriteLine (element.Name + ":" + element.Value.ToString());
        }
    }
    else
    {
     Console.WriteLine(elms.Name + ":" + elms.Value.ToString());
     }
}

按照以下步骤

使用XDocument.Passe()加载文档

XDocument myDoc = XDocument.Parse(doccontents);

然后使用

XNamespace messagens = "http://www.xxxx.org/schema/SCRIPT";
IEnumerable<XElement> elements = from node in myDoc.Elements(messagens + "NedicationDispensed")
            select node;

它应该返回内存中XElement对象的可枚举列表。