2014-11-05 4 views

ответ

0

Не очень конкретного подхода C1, но лично мой лучший подход был просто сделать отдельный веб-запрос для данной страницы, разобрать HTML, и сделать это.

Этот код может служить в качестве примера, его 1: 1 того, что я использую. Как вы можете видеть, хитрость заключается в том, чтобы найти элемент, который содержит контент, в моем примере его элемент внутри, который имеет идентификатор равен ContentColumnInner

public static string GetContentFromPage(Guid pageId) 
{ 
    var DomainName = HttpContext.Current.Request.Url.Authority; 
    var Uri = String.Format("http://{0}/page({1})", DomainName, pageId); 
    var request = WebRequest.Create(Uri); 

    // If required by the server, set the credentials. 
    request.Credentials = CredentialCache.DefaultCredentials; 

    // Get the response. 
    using (var response = (HttpWebResponse)request.GetResponseWithoutException()) 
    { 
     if (response.StatusCode != HttpStatusCode.OK) 
     { 
      LogError("StatusCode: " + response.StatusCode); 
      return null; 
     } 

     // Get the stream containing content returned by the server. 
     using (var responseStream = response.GetResponseStream()) 
     { 
      if (responseStream == null) 
      { 
       LogError("ResponseStream is null"); 
       return null; 
      } 

      // Open the stream using a StreamReader for easy access. 
      using (var stream = new StreamReader(responseStream)) 
      { 
       // Read the content. 
       var responseFromServer = stream.ReadToEnd(); 
       var beforeBodyStartIndex = responseFromServer.IndexOf("<body", StringComparison.Ordinal); 
       var afterBodyEndIndex = responseFromServer.LastIndexOf("</body>", StringComparison.Ordinal) + 7; 
       var body = responseFromServer.Substring(beforeBodyStartIndex, afterBodyEndIndex - beforeBodyStartIndex); 

       try 
       { 
        var xmlDocument = XElement.Parse(body); 

        var content = xmlDocument.Descendants().FirstOrDefault(o => o.Attribute("id") != null && o.Attribute("id").Value.EndsWith("ContentColumnInner")); 

        if (content == null || !content.HasElements) 
        { 
         return null; 
        } 

        var reader = content.CreateReader(); 
        reader.MoveToContent(); 

        return reader.ReadInnerXml(); 
       } 
       catch (XmlException ex) 
       { 
        LogError("Error parsing xml: " + ex.Message); 
        return null; 
       } 
      } 
     } 
    } 
} 
Смежные вопросы