2016-09-09 2 views
0

私はSelectSingleNodeメソッドについて少し混乱しています。 単純なxpath式を渡しています。すべてのネストノードを含む完全なコンテンツを持つノードを取得することを期待していますが、実際には、内側と外側のテキストなしで探していたものだけをHTMLタグで取得します。任意の子を含む。HtmlAgilityPack SelectSingleNodeはInnerHtmlを持たないHtmlNodeを返します

のXpath:ここ

//form 

はhtmlです:

<HTML> 
<BODY> 
<FORM METHOD="POST" ACTION="https://test.com/action"> 
<INPUT TYPE="hidden" NAME="attribute1" VALUE="some value"/> 
<INPUT TYPE="hidden" NAME="attribute2" VALUE="another value"/> 
</FORM> 
</BODY> 
</HTML> 

及び方法があります:

public List<Parameter> CollectFilledInputsFromResponseForm(IRestResponse response, string formXpath) 
    { 
     var responseAsHtml = new HtmlDocument(); 
     responseAsHtml.LoadHtml(response.Content); 
     var formDoc = responseAsHtml.DocumentNode.SelectSingleNode(formXpath); 

     if (formDoc == null) 
      throw new Exception(string.Format("No form found for '.{0}' xPath", formXpath)); 

     var formHtml = new HtmlDocument(); 
     formHtml.LoadHtml(formDoc.OuterHtml); 
     var inputs = formHtml.DocumentNode.SelectNodes("//input"); 

     var parameters = new List<Parameter>(); 
     foreach (var input in inputs) 
     { 
      var name = input.GetAttributeValue("name", "Name not found"); 
      var value = input.GetAttributeValue("value", "Value not found"); 

      if (name.Equals("Name not found") || value.Equals("Value not found")) 
       continue; 

      parameters.Add(new Parameter(){Name = name,Value = value,Type = ParameterType.GetOrPost}); 
     } 

     return parameters; 
    } 

Locals Screenshot

してくださいアドバイス。

答えて

関連する問題