我正在使用Xamarin android创建一个应用程序,在这里我正在解析我从Web请求获得的XML响应。 这是xml响应 -
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<IsActive xmlns="http://CTRMService/CTRM">true</IsActive>
</s:Header>
<s:Body>
<GetAllPersonResponse xmlns="http://CTRMService/CTRM">
<GetAllPersonResult xmlns:a="http://schemas.datacontract.org/2004/07/DTOModelLayer.DTO" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:DTOCtrmSetupPerson>
<a:CTRM_SETUP_PERSON_COMPANY_LINK i:nil="true"/>
<a:Company_Id i:nil="true"/>
<a:Customer_Id>1</a:Customer_Id>
<a:Email_Address i:nil="true"/>
<a:First_Name>Admin</a:First_Name>
<a:Invoice_Contact_Enum>false</a:Invoice_Contact_Enum>
<a:Job_Title_Enum i:nil="true"/>
<a:Last_Modify_Date>2017-04-24T17:12:22.657</a:Last_Modify_Date>
<a:Last_Name>Admin</a:Last_Name>
<a:Lock_Id>0</a:Lock_Id>
<a:Middle_Name i:nil="true"/>
<a:Modify_Person_Id>1</a:Modify_Person_Id>
<a:Person_Id>1</a:Person_Id>
<a:Person_Initials i:nil="true"/>
<a:Status_Enum>true</a:Status_Enum>
<a:System_Default_Enum>true</a:System_Default_Enum>
</a:DTOCtrmSetupPerson>
<a:DTOCtrmSetupPerson>
<a:CTRM_SETUP_PERSON_COMPANY_LINK i:nil="true"/>
<a:Company_Id>6</a:Company_Id>
<a:Customer_Id>1</a:Customer_Id>
<a:Email_Address/>
<a:First_Name>abc</a:First_Name>
<a:Invoice_Contact_Enum>true</a:Invoice_Contact_Enum>
<a:Job_Title_Enum>Trader</a:Job_Title_Enum>
<a:Last_Modify_Date>2017-04-06T10:55:41.05</a:Last_Modify_Date>
<a:Last_Name>xyz</a:Last_Name>
<a:Lock_Id>3</a:Lock_Id>
<a:Middle_Name/>
<a:Modify_Person_Id>1</a:Modify_Person_Id>
<a:Person_Id>2</a:Person_Id>
<a:Person_Initials>PB</a:Person_Initials>
<a:Status_Enum>false</a:Status_Enum>
<a:System_Default_Enum i:nil="true"/>
</a:DTOCtrmSetupPerson>
我已经发布了一个xml的部分,有10个以上的人。
我想要的是根据<a:Job_Title_Enum>
获取此人并将相应的人员ID分配给该人。例如:如果Job_Title_Enum是“交易者”,那么第一个名字和姓氏将被添加到一个列表中,每个人都有其各自的personID
我已经实现了一种解析方法,我在网上找到了 方法: -
XmlTextReader textReader = new XmlTextReader("E:\\GetAllPersonresponse.xml");
textReader.Read();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(textReader);
XmlNodeList FirstName = xmlDoc.GetElementsByTagName("a:First_Name");
XmlNodeList LastName = xmlDoc.GetElementsByTagName("a:Last_Name");
XmlNodeList JobTitle = xmlDoc.GetElementsByTagName("a:Job_Title_Enum");
XmlNodeList personID = xmlDoc.GetElementsByTagName("a:Person_Id");
for (int i = 0; i < JobTitle.Count; i++)
{
if (JobTitle[i].InnerText == "Trader")
{
Trader.Add(FirstName[i].InnerText + " " + LastName[i].InnerText +"(" + personID[i].InnerText+")");
}
}
此方法列出“名字姓氏(PersonID)”,例如: - Admin Admin(1)。你能建议我一个有效的方法吗?这将分配ID而不是将其打印在列表上,因为我会将此列表调整为微调器。
答案 0 :(得分:0)
使用Linq2Xml,
var xDoc = XDocument.Parse(xmlstring);
//var xDoc = XDocument.Load(filename);
XNamespace a = "http://schemas.datacontract.org/2004/07/DTOModelLayer.DTO";
var persons = xDoc.Descendants(a + "DTOCtrmSetupPerson")
.Select(x => new
{
firstName = (string)x.Element(a + "First_Name"),
personId = (int)x.Element(a + "Person_Id")
})
.ToList();