2013-10-14 49 views
0

我試圖解析WebDAV應用程序的響應時遇到了問題。 響應的相關部分看起來是這樣的: 的集合:通過XmlReader進行XML解析:將XMLElement名稱讀爲字符串

 .... 
     <D:getlastmodified xmlns:B="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/" B:dt="dateTime.rfc1123">Tue, 15 Jan 2013 15:47:30 GMT</D:getlastmodified> 
     <D:displayname>aaa.bc</D:displayname> 
     <D:resourcetype> 
      <D:collection /> 
     </D:resourcetype> 
     <D:getcontenttype>text/html; charset=utf-8</D:getcontenttype> 
     .... 

正常文件:

 .... 
     <D:getlastmodified xmlns:B="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/" B:dt="dateTime.rfc1123">Tue, 15 Jan 2013 15:47:30 GMT</D:getlastmodified> 
     <D:displayname>aaa.bc</D:displayname> 
     <D:resourcetype /> 
     <D:getcontenttype>text/html; charset=utf-8</D:getcontenttype> 
     .... 

我想用屬性解析爲C#對象是:

[XmlElement("resourcetype")] 
public string Type {get;set;} 

其中例如類型=「集合」的集合。

我該怎麼做?對於部分我貼我的C#代碼如下所示(但不這樣做我想要的):

[XmlRoot("prop")] 
    public class Prop 
    { 
     [XmlElement("creationdate")] 
     public string CreationDate { get; set; } 

     [XmlElement("getlastmodified")] 
     public string LastModified { get; set; } 

     [XmlElement("displayname")] 
     public string DisplayName { get; set; } 

     [XmlElement("resourcetype")] 
     public string ResourceType { get; set; } 

     [XmlElement("getcontenttype")] 
     public string ContentType { get; set; } 

     [XmlElement("getcontentlength")] 
     public string ContentLength { get; set; } 

     [XmlElement("getetag")] 
     public string ETag { get; set; } 

     [XmlElement("imagewidth")] 
     public string ImageWidth { get; set; } 

     [XmlElement("imageheight")] 
     public string ImageHeight { get; set; } 

     [XmlElement("thumbnailuri")] 
     public string TumbnailUri { get; set; } 

    } 

    [XmlRoot("resourcetype")] 
    public class ResourceType 
    { 
     [XmlElement("collection")] // TODO 
     public string Collection { get; set; } 
    } 

和方法來解析一切:

private T ParseWebDavXml<T>(string xml) 
    { 
     using (var reader = XmlReader.Create(new StringReader(xml))) 
     { 
      var serializer = new XmlSerializer(typeof(T), "DAV:"); 
      var result = (T)serializer.Deserialize(reader); 
      return result; 
     } 
    } 

回答

0

您可以將字符串類型更改爲ResourceType的對象類型爲fied。您還需要修飾使用XmlType屬性的ResourceType。你可以通過目標指定XmlType屬性(在你的情況下,2)。

您還需要創建兩種類型:

  • 爲一個字符串,
  • 一個用於收集。

但是你可以用兩個簡單的解決方案:

1

檢查此鏈接:我已經測試此代碼 從代碼中刪除FirtsColumn,SecondColumn和利用xmlDS根據您的要求

XML Parsing