使用Linq-to-XML ASP.Net C#查询嵌套XML元素

时间:2012-04-03 14:46:02

标签: xml asp.net-mvc-3 c#-4.0 linq-to-xml

在我的ASP.Net C#应用程序中,

我正在尝试将嵌套的XML元素读取为匿名类型集合。

这是XML样本

    <MedicationDispensed xmlns="http://www.ncpdp.org/schema/SCRIPT">
  <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-03</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>

我在这里成功

 var MedicationDispensed = (from elem in xdoc.Descendants(NameSpace + "MedicationDispensed")
                                           .Descendants(NameSpace + "DrugCoded")
                                           //.Descendants(NameSpace + "Quantity")
                                       select new
                                       {
                                           DrugDescription = elem.Parent.Element(NameSpace + "DrugDescription").Value,
                                           ProductCode = elem.Element(NameSpace + "ProductCode").Value,
                                           ProductCodeQualifier = elem.Element(NameSpace + "ProductCodeQualifier").Value,
                                           //Qualifier = elem.Parent.Element(NameSpace + "Qualifier").Value,
                                           //Value = elem.Element(NameSpace + "Value").Value,
                                           //CodeListQualifier = elem.Element(NameSpace + "CodeListQualifier").Value,
                                           DaysSupply = elem.Parent.Element(NameSpace + "DaysSupply").Value,
                                           LastFillDate = elem.Parent.Element(NameSpace + "LastFillDate").Value
                                       }).ToList();

我无法查询数量,而且我还需要为Pharmacy和Prescriber进行查询。 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我在StackOverflow

的另一篇文章的帮助下得到了答案

这是我的代码,以实现我想要的。

 var MedicationDispensed = (from MD in xdoc.Descendants(NameSpace + "MedicationDispensed")
                                       let DrugCoded = MD.Element(NameSpace + "DrugCoded")
                                       let Quantity = MD.Element(NameSpace + "Quantity")
                                       let Pharmacy = MD.Element(NameSpace + "Pharmacy")
                                       let phIdentification = Pharmacy.Element(NameSpace + "Identification")
                                       let phAddress = Pharmacy.Element(NameSpace + "Address")
                                       let phPhoneNumbers = Pharmacy.Element(NameSpace + "PhoneNumbers")
                                       let phPhone = phPhoneNumbers.Element(NameSpace + "Phone")
                                       let Prescriber = MD.Element(NameSpace + "Prescriber")
                                       let prIdentification = Prescriber.Element(NameSpace + "Identification")
                                       let prName = Prescriber.Element(NameSpace + "Name")
                                       let prAddress = Prescriber.Element(NameSpace + "Address")
                                       select new
                                       {
                                           DrugDescription = MD.Element(NameSpace + "DrugDescription").Value,
                                           ProductCode = DrugCoded.Element(NameSpace + "ProductCode").Value,
                                           ProductCodeQualifier = DrugCoded.Element(NameSpace + "ProductCodeQualifier").Value,
                                           Qualifier = Quantity.Element(NameSpace + "Qualifier").Value,
                                           Value = Quantity.Element(NameSpace + "Value").Value,
                                           CodeListQualifier = Quantity.Element(NameSpace + "CodeListQualifier").Value,
                                           DaysSupply = MD.Element(NameSpace + "DaysSupply").Value,
                                           LastFillDate = MD.Element(NameSpace + "LastFillDate").Value,
                                           phStoreName = Pharmacy.Element(NameSpace + "StoreName").Value,
                                           phNCPDPID = phIdentification.Element(NameSpace + "NCPDPID").Value,
                                           phAddress1 = phAddress.Element(NameSpace + "AddressLine1").Value,
                                           phCity = phAddress.Element(NameSpace + "City").Value,
                                           phState = phAddress.Element(NameSpace + "State").Value,
                                           phZipcode = phAddress.Element(NameSpace + "ZipCode").Value,
                                           phPhoneNumber = phPhone.Element(NameSpace + "Number").Value,
                                           phQualifier = phPhone.Element(NameSpace + "Qualifier").Value,
                                           prDEANumber = prIdentification.Element(NameSpace + "DEANumber").Value,
                                           prLastName = prName.Element(NameSpace + "LastName").Value,
                                           prFirstName = prName.Element(NameSpace + "FirstName").Value,
                                           prMiddleName = prName.Element(NameSpace + "MiddleName").Value,
                                           prAddress1 = prAddress.Element(NameSpace + "AddressLine1").Value,
                                           prCity = prAddress.Element(NameSpace + "City").Value,
                                           prState = prAddress.Element(NameSpace + "State").Value,
                                           prZipCode = prAddress.Element(NameSpace + "ZipCode").Value
                                       }).ToList();

希望这对需要同样工作的人有用。