TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
eutychos tfar
NA
2
392
How to load XML data to a data structure?
Jan 23 2021 6:51 AM
I have the following XML document
<?xml version =
"1.0"
encoding =
"utf-8"
?>
<flights_for_sale>
<ad id=
"0001"
createdon =
"11/02/20"
expireson=
"12/02/20"
>
<aircraft id=
"A10"
>
<year> 1977 </year>
<make> <![CDATA[&c;]]> </make>
<model> Skyhawk </model>
<color> Light blue and white </color>
<description>
New paint, nearly
new
interior,
685 hours SMOH, full IFR King avionics
</description>
<price> 23,495 </price>
</aircraft>
<seller id =
"s001"
phone=
"123-123-123"
> Skyway Aircraft </seller>
<seller id =
"s002"
phone=
"123-123-222"
> Boeing </seller>
<seller id =
"s003"
phone=
"123-123-233"
> McDouglas </seller>
<membership id=
"1000"
from=
"12/03/16"
to=
"12/03/18"
no=
"M0001"
>Silver</membership>
<membership id=
"1000"
from=
"12/03/16"
to=
"12/03/18"
no=
"M0002"
>Gold</membership>
<membership id=
"1000"
from=
"12/03/16"
to=
"12/03/18"
no=
"M0003"
>Platinum</membership>
<location>
<city> Rapid City, </city>
<state> South Dakota </state>
</location>
</ad>
<ad id=
"002"
createdon =
"11/05/20"
expireson=
"12/05/20"
>
<aircraft>
<year> 1965 </year>
<make> &p; </make>
<model> Cherokee </model>
<color> Gold </color>
<description>
240 hours SMOH, dual NAVCOMs, DME,
new
Cleveland brakes, great shape
</description>
</aircraft>
<seller phone=
"555-333-2222"
email=
"
[email protected]
"
id=
"s004"
>John Seller</seller>
<membership id=
"1000"
from=
"12/03/16"
to=
"12/03/18"
no=
"M0020"
>State Membership</membership>
<membership id=
"1000"
from=
"12/03/16"
to=
"12/03/18"
no=
"M0002"
>Gold</membership>
<location>
<city> St. Joseph, </city>
<state> Missouri </state>
</location>
</ad>
</flights_for_sale>
I have the following C# classes
class
Advert2
{
public
int
? Id {
get
;
set
; }
public
DateTime? CreatedOn {
get
;
set
; }
public
DateTime? ExpiresOn {
get
;
set
; }
public
Aircraft MyAircraft {
get
;
set
; }
public
List<Seller2> MySellers {
get
;
set
; }
public
List<Membership> MyMemberships {
get
;
set
; }
public
Advert2()
{
MySellers =
new
List<Seller2>();
MyMemberships =
new
List<Membership>();
MyAircraft =
new
Aircraft();
}
}
class
Seller2
{
public
int
? Id {
get
;
set
; }
public
string
SellerName {
get
;
set
; }
public
string
Phone {
get
;
set
; }
}
class
Membership
{
public
int
? Id {
get
;
set
; }
public
string
MembershipNumber {
get
;
set
; }
public
DateTime? From {
get
;
set
; }
public
DateTime? To {
get
;
set
; }
public
String MemberType {
get
;
set
; }
}
class
Aircraft {
public
string
Make {
get
;
set
; }
public
string
Model {
get
;
set
; }
public
decimal
? Price {
get
;
set
; }
public
string
Description {
get
;
set
; }
}
Then i have used the following two methods to parse XML elements and attributes ( check for NULLs )
public
static
class
XMLCommons
{
public
static
string
TryGetElementValue(
this
XElement parentEl,
string
elementName,
string
defaultValue =
null
)
{
var foundEl = parentEl.Element(elementName);
if
(foundEl !=
null
)
{
return
foundEl.Value;
}
return
defaultValue;
}
public
static
string
TryGetAttribtueValue(
this
XElement parentEl,
string
elementName,
string
attrName,
string
defaultValue =
null
)
{
var foundEl = parentEl.Element(elementName);
if
(foundEl !=
null
) {
//check attribute exists
var foundAttr = foundEl.Attribute(attrName);
if
(foundAttr !=
null
)
{
return
foundAttr.Value;
}
}
return
defaultValue;
}
}
Then i have written the following code to read element/attributes on the XML, and populate data to the `Advert2` object structure
var xmlPath2 = System.IO.Path.Combine(
"../../../data/"
+
"XMLFile2.xml"
);
var xml2 = XDocument.Load(xmlPath2);
var query2 = xml2.Root.Descendants(
"ad"
).Select(n =>
new
Advert2 {
Id = Convert.ToInt32(n.Parent.TryGetAttribtueValue(
"ad"
,
"id"
)),
CreatedOn = Convert.ToDateTime( n.Parent.TryGetAttribtueValue(
"ad"
,
"createdon"
) ),
ExpiresOn = Convert.ToDateTime(n.Parent.TryGetAttribtueValue(
"ad"
,
"expireson"
)),
MyAircraft =
new
Aircraft {
Make = n.TryGetElementValue(
"make"
),
Model = n.TryGetElementValue(
"model"
),
Description = n.TryGetElementValue(
"description"
),
Price = Convert.ToDecimal( n.TryGetElementValue(
"price"
) ) },
MySellers =
new
List<Seller2>().Add(
new
Seller2 {
Id = Convert.ToInt32( n.TryGetAttribtueValue(
"seller"
,
"id"
) ),
SellerName = n.TryGetElementValue(
"seller"
),
Phone = n.TryGetAttribtueValue(
"seller"
,
"phone"
)
} )
}).ToList();
but the issues is i get syntax errors when i tried to create objects to populate `MySellers` List.
Error:
Severity Code Description Project File Line Suppression State
Error CS0029 Cannot implicitly convert type
'void'
to System.Collections.Generic.List<XMLParsing.Seller2>'
So it seems like i don't know how to populate those two collections `MySellers` and `MyMemberships`.
is there away to populate those two collections so i can create the `Averts2` Collection?
Reply
Answers (
1
)
Not able to debug Blazor wasm even after trying shift alt D
Save Range of models