使用具有深嵌套循环的LINQ进行XML解析

我在获取CoveredPersons和CoveredPerson Tag值时遇到问题。
<Header>
    <Model_Name>Sample Model Name</Model_Name>
</Header>
<Data>
    <ContractNumber>0-99-54321</ContractNumber>
    <InitialEffectiveDate>11/04/2011</InitialEffectiveDate>
    <ContractEndDate></ContractEndDate>
    <RenewalDate>11/04/2021</RenewalDate>
    <NextContractBirthdate>11/04/2011</NextContractBirthdate>
    <SmokerClassification>Non Smoker</SmokerClassification>
    <BillingFrequency>Annually</BillingFrequency>
    <PremiumWithTax>270.23</PremiumWithTax>
    <AnnualPolicyFee>100.00</AnnualPolicyFee>
    <PayerRelationToSubscriber></PayerRelationToSubscriber>
    <PayerasPerson>
        <FirstName>Steve</FirstName>
        <MiddleName1></MiddleName1>
        <LastName>Jordan</LastName>
        <SecondLastName></SecondLastName>
    </PayerasPerson>
    <SubscribedOptions>
        <OfferedEntity>
            <Code>A-1</Code>
            <Name>Sample Entity</Name>
        </OfferedEntity>
        <CoveredPersons>
            <CoveredPerson>
                <FirstName>Steve</FirstName>
                <MiddleName1></MiddleName1>
                <LastName>Square</LastName>
                <BirthDate>01/01/1980</BirthDate>
                <Gender>Male</Gender>
            </CoveredPerson>
            <EliminationPeriod></EliminationPeriod>
        </CoveredPersons>
        <CoverageAmount>75,000.00</CoverageAmount>
        <PremiumWithTax>61.50</PremiumWithTax>
        <InitialEffectiveDate>11/04/2011</InitialEffectiveDate>
        <ContractEndDate></ContractEndDate>
        <TerminationDate></TerminationDate>
        <ExpirationDateToConvert>01/01/2040</ExpirationDateToConvert>
        <CoveredPersonCount>1</CoveredPersonCount>
    </SubscribedOptions>
    <SubscribedOptions>
        <OfferedEntity>
            <Code>B-1</Code>
            <Name>Sample Entity 2</Name>
        </OfferedEntity>
        <CoveredPersons>
            <CoveredPerson>
                <FirstName>Juan</FirstName>
                <MiddleName1></MiddleName1>
                <LastName>Osorio</LastName>
                <BirthDate>01/01/1980</BirthDate>
                <Gender>Male</Gender>
            </CoveredPerson>
            <EliminationPeriod></EliminationPeriod>
        </CoveredPersons>
        <CoverageAmount>5,000.00</CoverageAmount>
        <PremiumWithTax>0.00</PremiumWithTax>
        <InitialEffectiveDate>11/04/2011</InitialEffectiveDate>
        <ContractEndDate></ContractEndDate>
        <TerminationDate></TerminationDate>
        <ExpirationDateToConvert>01/01/2040</ExpirationDateToConvert>
        <CoveredPersonCount>1</CoveredPersonCount>
    </SubscribedOptions>        
    <Subscriber>
        <FirstName>Juan</FirstName>
        <LastName>Osorio</LastName>
        <MiddleName1></MiddleName1>
        <SecondLastName>Uno</SecondLastName>
        <Gender>Male</Gender>
        <Age>31</Age>
    </Subscriber>
    <OfferedEntity>
        <Name>Sample Base Entity</Name>
        <Code>CODE-54321</Code>
    </OfferedEntity>
</Data>
这是我到目前为止:
foreach (var xSubscribedOptions in (from suboptions in xDoc.Descendants("SubscribedOptions")
                                        from suboptionsOffEntity in xDoc.Descendants("SubscribedOptions").Descendants("OfferedEntity")
                                        from suboptionsCovPerson in xDoc.Descendants("SubscribedOptions").Descendants("CoveredPerson")
                                        from suboptionsCovPersonCovPerson in xDoc.Descendants("CoveredPersons").Descendants("CoveredPerson")
                                        select new
                                        {
                                            OfferedEntityCode = suboptionsOffEntity.Element("Code").Value,
                                            OfferedEntityName = suboptionsOffEntity.Element("Name").Value,
                                            SubscribedOptionsCoverageAmount = suboptions.Element("CoverageAmount").Value,
                                            SubscribedOptionsPremiumWithTax = suboptions.Element("PremiumWithTax").Value,
                                            SubscribedOptionsInitialEffectiveDate = suboptions.Element("InitialEffectiveDate").Value,
                                            SubscribedOptionsContractEndDate = suboptions.Element("ContractEndDate").Value,
                                            SubscribedOptionsTerminationDate = suboptions.Element("TerminationDate").Value,
                                            SubscribedOptionsExpirationDateToConvert = suboptions.Element("ExpirationDateToConvert").Value,
                                            SubscribedOptionsCoveredPersonCount = suboptions.Element("CoveredPersonCount").Value,
                                            CoveredPersonFirstName = suboptionsCovPersonCovPerson.Element("FirstName").Value,
                                            CoveredPersonMiddleName1 = suboptionsCovPersonCovPerson.Element("MiddleName1").Value,
                                            CoveredPersonLastName = suboptionsCovPersonCovPerson.Element("LastName").Value,
                                            CoveredPersonBirthDate = suboptionsCovPersonCovPerson.Element("BirthDate").Value,
                                            CoveredPersonGender = suboptionsCovPersonCovPerson.Element("Gender").Value,
                                            CoveredPersonEliminationPeriod = suboptionsCovPerson.Element("EliminationPeriod").Value                                            }))
    {    }
    
已邀请:
你可以用
CoveredPersonFirstName = suboptions.XPathSelectElement("./CoveredPersons/CoveredPerson/FirstName").Value
CoveredPersonLastName = suboptions.XPathSelectElement("./CoveredPersons/CoveredPerson/LastName").Value
您需要从CoveredPerson标记中检索的每个元素等     
Inlcude
using System.Xml.XPath;
为了获得XPath扩展方法,例如
XPathSelectElement
    

要回复问题请先登录注册