uwp客户端使用webservice返回ArrayOfXElement格式,这个格式大概是这个样子
<DataSet xmlns="http://tempuri.org/"> <xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet"> <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="Table"> <xs:complexType> <xs:sequence> <xs:element name="ID" type="xs:int" minOccurs="0"/> <xs:element name="classtitle" type="xs:string" minOccurs="0"/> <xs:element name="classfile" type="xs:string" minOccurs="0"/> <xs:element name="userName" type="xs:string" minOccurs="0"/> <xs:element name="note" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema> <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> <NewDataSet xmlns=""> <Table diffgr:id="Table1" msdata:rowOrder="0"> <ID>26</ID> <classtitle>tyu</classtitle> <classfile>E:\FTP\web\site\files\课程表uwp\16-11-02</classfile> </Table> <Table diffgr:id="Table2" msdata:rowOrder="1"> <ID>27</ID> <classtitle>辽宁工程技术大学机械工程系机械工程16-2班大一上学期课程表</classtitle> <classfile>E:\FTP\web\site\files\课程表uwp\16-11-21</classfile> </Table> <Table diffgr:id="Table3" msdata:rowOrder="2"> <ID>28</ID> <classtitle>哈哈哈哈</classtitle> <classfile> C:\Users\Administrator\Desktop\mywebsite\files\课程表uwp\17-02-26 </classfile> </Table> <Table diffgr:id="Table4" msdata:rowOrder="3"> <ID>29</ID> <classtitle>ssz6</classtitle> <classfile> C:\Users\Administrator\Desktop\mywebsite\files\课程表uwp\17-02-26 </classfile> </Table> <Table diffgr:id="Table5" msdata:rowOrder="4"> <ID>30</ID> <classtitle>aa</classtitle> <classfile> C:\Users\Administrator\Desktop\mywebsite\files\课程表uwp\17-02-27 </classfile> </Table> </NewDataSet> </diffgr:diffgram> </DataSet>
首先是一个表头,其次才有内容。
对于这样的格式,返回是xelement的集合,首先获得真正的表的节点。使用Nodes.Descendants("Table"),获得指定标签,然后foreach遍历,具体使用过程看下面。
private async void FindAll() { mywebservice.kechengbiaoSoapClient client = new mywebservice.kechengbiaoSoapClient(); ArrayOfXElement tables = await client.loadallclassAsync(); foreach (XElement el in tables.Nodes.Descendants("Table")) { ClassIndex table = new ClassIndex(); foreach (XElement ell in el.Nodes()) { // table.IndexId = Convert.ToInt32(ell.Value); switch (Convert.ToString(ell.Name)) { case "ID": table.IndexId = Convert.ToInt32(ell.Value); break; case "classtitle": table.IndexTitle = ell.Value; break; default: break; } } data.Add(table); } listView.DataContext = data; }
至于怎么处理,怎么数据绑定,就在遍历内部处理一下,体验下来,这个Xelememt还是很方便的。需要熟悉,我以前一直用xmlelement,不习惯用Xelement,不过xelement支持linq支持的好一点,微软默认用的Xelement。