C #: получить определенный элемент перед другим элементом с Linq - PullRequest
0 голосов
/ 27 июня 2019

Рассмотрим следующий фрагмент из XSD:

    <xs:complexType name="AccountIdentification4ChoiceGPS">
    <xs:choice>
        <xs:element name="IBAN" type="IBAN2007Identifier">
            <xs:annotation>
                <xs:appinfo>
                    <xs:logicalname>IBAN</xs:logicalname>
                    <xs:additionalInfo>[A-Z]{2,2}[0-9]{2,2}[a-zA-Z0-9]{1,30}</xs:additionalInfo>
                    <xs:ISOType>(CashAccount20)</xs:ISOType>
                </xs:appinfo>
                <xs:documentation>Unambiguous identification of the account as International Bank Account Number (IBAN).</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element name="Othr" type="GenericAccountIdentification1GPS">
            <xs:annotation>
                <xs:appinfo>
                    <xs:logicalname>Other</xs:logicalname>
                    <xs:ISOType>(CashAccount20)</xs:ISOType>
                </xs:appinfo>
            </xs:annotation>
        </xs:element>
    </xs:choice>
</xs:complexType>

Использование LINQ: если я знаю element name="IBAN", как я могу получить элемент <xs:complexType name="AccountIdentification4ChoiceGPS">, если я не знаю много о содержимом моего XSD.`?Единственное, что я могу знать, это то, что LocalName - это "complexType";

Я думаю о:

    IEnumerable<XElement> elementAbove = xsdDocument.Descendants()
.Where(x=>x.Name.LocalName == "complexType")
.Select(Get here the value of the element that could be the parent or the parent's parent).

Вот где я застрял.

1 Ответ

2 голосов
/ 28 июня 2019

Попробуйте:

IEnumerable<XElement> elementAbove = xsdDocument.Descendants()
   .Where(x => x.Name.LocalName == "complexType" && x.Descendants().Any(y => y.Name.LocalName == "element" && y.Attributes().Any(z => z.Value == "IBAN")));
...