Разбор XML, если все имена узлов не известны - PullRequest
0 голосов
/ 19 октября 2011
XDocument loaded = XDocument.Parse(mainXML);
var ContactInfo =
    from Contact in loaded.Descendants("Contacts")
    select new
    {
        ContactID = Contact.Attribute("Id").Value,
        Displayed = Contact.Attribute("Displayed").Value,
        AddressList = Contact.Descendants("AddressList"),
        CellPhone = Contact.Element("CellPhone").Value,
        Citation = Contact.Element("Citation").Value,
        DrivingLicense = Contact.Element("DrivingLicense").Value,
        Fax = Contact.Element("Fax").Value,
        HomePhone = Contact.Element("HomePhone").Value,
    };

У меня есть некоторые другие имена элементов в mainXML, такие как WorkPhone, которые существуют не во всех элементах. Если я добавлю эти свойства и запущу его, он получит NullPointerException s из-за этого.

<Contacts Id="firstcontact" Displayed="False">
    <IsCaller />
    <Role />
    <RelationToRole />
    <PersonInfo>
        <DBA />
        <DateOfBirth />
        <FirstName>TRinya</FirstName>
        <LastName />
        <MiddleName />
    </PersonInfo>
    <AddressList>
        <AddressLine1 />
        <City />
        <Email />
        <EmailPreferred />
        <State />
        <ZipCode />
        <pyCountry>USA</pyCountry>
    </AddressList>
    <Citation />
    <DrivingLicense />
    <Language />
    <InterpreterNeeded />
    <Pedestrian />
    <PersonalInjury>
        <InjuredYesNoUnk />
        <TypeOfInjury />
        <InjuredAffectedArea />
        <InjuryDescription />
    </PersonalInjury>
    <PositionInVehicle />
    <HomePhone />
    <CellPhone />
    <pyWorkPhone />
    <Fax />
    <PrimaryPhone />
    <PrimaryPhoneType />
</Contacts>

1 Ответ

1 голос
/ 25 октября 2011

Вместо использования свойства Value элементов, приведенных к строке. Таким образом, если элемент не существует в вашем XML, он вернет null (как обычно) и фактическое значение, если он существует.

var contactInfos =
    from contact in loaded.Descendants("Contacts")
    select new
    {
        ContactID = (string)contact.Attribute("Id"),
        Displayed = (string)contact.Attribute("Displayed"),
        AddressList = contact.Descendants("AddressList"),
        CellPhone = (string)contact.Element("CellPhone"),
        Citation = (string)contact.Element("Citation"),
        DrivingLicense = (string)contact.Element("DrivingLicense"),
        Fax = (string)contact.Element("Fax"),
        HomePhone = (string)contact.Element("HomePhone"),
        WorkPhone = (string)contact.Element("WorkPhone"),
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...