2016-09-21 4 views
1

Ist es möglich, mit dem C# HTML Agility Pack eine Variable in den ausgewählten Knoten einzufügen?Variable in HTML-Eingabe-Tag-Wert injizieren mit Html Agility Pack C#

Ich habe mein HTML-Formular erstellt, geladen es, und ausgewählt, um den Eingangsknoten, die ich will, und jetzt würde Ich mag im Wertfeld

Hier eine SAML-Antwort injizieren ist ein bisschen des Code, den ich haben, zuerst das HTML-Dokument:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title></title> 
</head> 
<body runat="server" id="bodySSO"> 
    <form id="frmSSO" runat="server" enableviewstate="False"> 
     <div style="display:none" > 
      <input id="SAMLResponse" name="SAMLResponse" type="text" runat="server" enableviewstate="False" value=""/> 
      <input id="Query" name="Query" type="text" runat="server" enableviewstate="False" value=""/> 
     </div> 
    </form> 
</body> 
</html> 

und hier ist die Funktion, die das HTML-Dokument lädt und wählt den Knoten ich möchte:

public static string GetHTMLForm(SamlAssertion samlAssertion) 
{ 
    HtmlAgilityPack.HtmlDocument HTMLSamlDocument = new HtmlAgilityPack.HtmlDocument(); 
    HTMLSamlDocument.Load(@"C:\HTMLSamlForm.html"); 
    HtmlNode node = HTMLSamlDocument.DocumentNode.SelectNodes("//input[@id='SAMLResponse']").First(); 

    //Code that will allow me to inject into the value field my SAML Response 
} 

EDIT:

Ok, so habe ich erreicht die SAML-Response-Paket in das Feld „Wert“ des HTML-Input-Tag mit dieser Injektion:

HtmlAgilityPack.HtmlDocument HtmlDoc = new HtmlAgilityPack.HtmlDocument(); 
String SamlInjectedPath = "C:\\SamlInjected.txt"; 
HtmlDoc.Load(@"C:\HTMLSamlForm.txt"); 
var SAMLResposeNode = HtmlDoc.DocumentNode.SelectSingleNode("//input[@id='SAMLResponse']").ToString(); 
SAMLResposeNode = "<input id='SAMLResponse' name='SAMLResponse' type='text' runat='server' enableviewstate='False' value='" + samlAssertion + "'/>"; 

Jetzt müssen nur in der Lage sein ich hinzufügen, dass Tag zurück in die injizierte Original-HTML-Dokument

+0

Ich denke, dass es etwas, das in dieser Frage sein könnte http://stackoverflow.com/questions/9520932/how-do-i-use-html-agility-pack-to-edit -an-html-Ausschnitt – Pete

Antwort

0

ok ich habe dies die folgende Verwendung gelöst:

HtmlAgilityPack.HtmlDocument HtmlDoc = new HtmlAgilityPack.HtmlDocument(); 
HtmlDoc.Load(@"C:\HTMLSamlForm.html"); 
var SamlNode = HtmlNode.CreateNode("<input id='SAMLResponse' name='SAMLResponse' type='text' runat='server' enableviewstate='False' value='" + samlAssertion + "'/>"); 
foreach (HtmlNode node in HtmlDoc.DocumentNode.SelectNodes("//input[@id='SAMLResponse']")) 
{ 
    string value = node.Attributes.Contains("value") ? node.Attributes["value"].Value : "&nbsp;"; 
    node.ParentNode.ReplaceChild(SamlNode, node); 
} 

Dann, um den Inhalt der neuen HTML-Datei, die ich Ausgabe zu überprüfen, es dies mit:

System.IO.File.WriteAllText(@"C:\SamlInjected.txt", HtmlDoc.DocumentNode.OuterHtml);