在C#中解析xml
本文关键字:xml | 更新日期: 2023-09-27 17:58:42
我很难将这个xml文件作为朋友列表来阅读。我需要结果作为朋友列表(List<Friend>
),其中朋友是
public class Friend
{
public string UID {get;set;}
public string Provider {get;set;}
public string PhotoUrl {get;set;}
public string ProfileUrl {get;set;
}
<?xml version="1.0" encoding="utf-8"?>
<socialize.getFriendsInfoResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:com:gigya:api http://socialize-api.gigya.com/schema" xmlns="urn:com:gigya:api">
<statusCode>200</statusCode>
<errorCode>0</errorCode>
<statusReason>OK</statusReason>
<callId>ae61ae53a6094364998206a196874d04</callId>
<friends>
<friend>
<UID>_gid_Maj4wFcR3PA10EXENS/SfNhfszDYN9WRQzBgVyOPz0M=</UID>
<isSiteUser>false</isSiteUser>
<isSiteUID>false</isSiteUID>
<identities>
<identity>
<provider>facebook</provider>
<providerUID>100000378470436</providerUID>
<isLoginIdentity>false</isLoginIdentity>
<nickname>Afzal Raaz</nickname>
<photoURL>https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/70854_100000378470436_113535_s.jpg</photoURL>
<thumbnailURL>https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/70854_100000378470436_113535_q.jpg</thumbnailURL>
<firstName>Afzal</firstName>
<lastName>Raaz</lastName>
<gender>m</gender>
<profileURL>http://www.facebook.com/profile.php?id=100000378470436</profileURL>
</identity>
</identities>
<nickname>Afzal Raaz</nickname>
<photoURL>https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/70854_100000378470436_113535_s.jpg</photoURL>
<thumbnailURL>https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/70854_100000378470436_113535_q.jpg</thumbnailURL>
<firstName>Afzal</firstName>
<lastName>Raaz</lastName>
<gender>m</gender>
<profileURL>http://www.facebook.com/profile.php?id=100000378470436</profileURL>
</friend>
<friend>
<UID>_gid_T6vgh4MDshLvMYzi+Isxa0Ryf0ou2OJf+14pd6iwXlY=</UID>
<isSiteUser>false</isSiteUser>
<isSiteUID>false</isSiteUID>
<identities>
<identity>
<provider>facebook</provider>
<providerUID>100001052246730</providerUID>
<isLoginIdentity>false</isLoginIdentity>
<nickname>Ajaydeep Singh</nickname>
<photoURL>https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/203414_100001052246730_126837_s.jpg</photoURL>
<thumbnailURL>https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/203414_100001052246730_126837_q.jpg</thumbnailURL>
<firstName>Ajaydeep</firstName>
<lastName>Singh</lastName>
<gender>m</gender>
<profileURL>http://www.facebook.com/profile.php?id=100001052246730</profileURL>
</identity>
</identities>
<nickname>Ajaydeep Singh</nickname>
<photoURL>https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/203414_100001052246730_126837_s.jpg</photoURL>
<thumbnailURL>https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/203414_100001052246730_126837_q.jpg</thumbnailURL>
<firstName>Ajaydeep</firstName>
<lastName>Singh</lastName>
<gender>m</gender>
<profileURL>http://www.facebook.com/profile.php?id=100001052246730</profileURL>
</friend>
</friends>
</socialize.getFriendsInfoResponse>
如果您想使用XML序列化,您有两个选项:使用系统中的类。Xml。序列化命名空间,并创建一个类结构,该类结构将容纳您需要的数据;或者使用诸如xsd.exe之类的工具为您生成类。使用前者,你会得到一个简洁的数据模型,使用后者,你可能会得到比你真正需要的更多的类(自动生成的价格)。
如果您想使用xsd.exe,您应该首先将XML保存在一个文件中(比如"file.XML"),然后运行它来创建文件的模式:
xsd.exe file.xml
这将创建一个名为file.xsd的文件,其中包含该XML的模式。然后再次运行xsd.exe生成类,XmlSerializer可以使用这些类来使用XML:
xsd.exe /c file.xsd
您可以尝试这样的方法。
XDocument doc = XDocument.Parse(@" ... XML ... ");
Func<XElement, string, string> get =
(el, name) => (string)el.Element(XName.Get(name, "urn:com:gigya:api"));
var friends =
from el in doc.Descendants(XName.Get("friend", "urn:com:gigya:api"))
select new Friend
{
UID = get(el, "UID"),
PhotoUrl = get(el, "photoURL"),
ProfileUrl = get(el, "profileURL"),
};
List<Friend> friendList = friends.ToList();
public class FriendList
{
public List<Friend> friends;
public FriendList()
{
friends= new List<Friend>();
}
}
public class Friend
{
public string UID {get;set;}
public string Provider {get;set;}
public string PhotoUrl {get;set;}
public string ProfileUrl {get;set;}
}
Public class ParseFriends
{
FriendList p = new FriendList();
public ReadFriends()
{
DirectoryInfo dir = new DirectoryInfo("../path to your xml file");
FileInfo[] files = dir.GetFiles("*.*"); // read all xml file from a folder
XmlDocument doc = new XmlDocument();
foreach (FileInfo f in files)
{
Friend e = new Friend();
doc.Load(f.FullName);
e.UID = doc.GetElementsByTagName("UID")[0].InnerText;
e.Provider = doc.GetElementsByTagName("Provider")[0].InnerText;
e.PhotoUrl = doc.GetElementsByTagName("PhotoUrl")[0].InnerText;
e.ProfileUrl = doc.GetElementsByTagName("ProfileUrl")[0].InnerText;
p.empDetails.Add(e);
}
return p;
}
}
试试这个。。。