2012-08-05 66 views
1

我正在尋找從webBrowser控件解析XML本身。從webBrowser控件中提取XML

我已經嘗試使用webBrowser1.DocumentText.ToString()來獲取XML,但它並沒有給出XML本身,它給出了網頁源代碼以及提供頁面的所有CSS等。這方面的一個例子如下:

<?xml version="1.0"?> 
<test> 
    <example>Hello</example> 
</test> 

這就是我想要的東西有輸出,而是做webBrowser.DocumentText.ToString()給出如下:

<HTML><HEAD> 
<STYLE>BODY{font:x-small 'Verdana';margin-right:1.5em} 
.c{cursor:hand} 
.b{color:red;font-family:'Courier New';font-weight:bold;text-decoration:none} 
.e{margin-left:1em;text-indent:-1em;margin-right:1em} 
.k{margin-left:1em;text-indent:-1em;margin-right:1em} 
.t{color:#990000} 
.xt{color:#990099} 
.ns{color:red} 
.dt{color:green} 
.m{color:blue} 
.tx{font-weight:bold} 
.db{text-indent:0px;margin-left:1em;margin-top:0px;margin-bottom:0px;padding-left:.3em;border-left:1px solid #CCCCCC;font:small Courier} 
.di{font:small Courier} 
.d{color:blue} 
.pi{color:blue} 
.cb{text-indent:0px;margin-left:1em;margin-top:0px;margin-bottom:0px;padding-left:.3em;font:small Courier;color:#888888} 
.ci{font:small Courier;color:#888888} 
PRE{margin:0px;display:inline}</STYLE> 
<SCRIPT><!-- 
function f(e){ 
if (e.className=="ci"){if (e.children(0).innerText.indexOf("\n")>0) fix(e,"cb");} 
if (e.className=="di"){if (e.children(0).innerText.indexOf("\n")>0) fix(e,"db");} 
e.id=""; 
} 
function fix(e,cl){ 
e.className=cl; 
e.style.display="block"; 
j=e.parentElement.children(0); 
j.className="c"; 
k=j.children(0); 
k.style.visibility="visible"; 
k.href="#"; 
} 
function ch(e){ 
mark=e.children(0).children(0); 
if (mark.innerText=="+"){ 
mark.innerText="-"; 
for (var i=1;i<e.children.length;i++) 
e.children(i).style.display="block"; 
} 
else if (mark.innerText=="-"){ 
mark.innerText="+"; 
for (var i=1;i<e.children.length;i++) 
e.children(i).style.display="none"; 
}} 
function ch2(e){ 
mark=e.children(0).children(0); 
contents=e.children(1); 
if (mark.innerText=="+"){ 
mark.innerText="-"; 
if (contents.className=="db"||contents.className=="cb") 
contents.style.display="block"; 
else contents.style.display="inline"; 
} 
else if (mark.innerText=="-"){ 
mark.innerText="+"; 
contents.style.display="none"; 
}} 
function cl(){ 
e=window.event.srcElement; 
if (e.className!="c"){e=e.parentElement;if (e.className!="c"){return;}} 
e=e.parentElement; 
if (e.className=="e") ch(e); 
if (e.className=="k") ch2(e); 
} 
function ex(){} 
function h(){window.status=" ";} 
document.onclick=cl; 
--></SCRIPT> 
</HEAD> 
<BODY class="st"><DIV class="e"> 
<SPAN class="b">&nbsp;</SPAN> 
<SPAN class="m">&lt;?</SPAN><SPAN class="pi">xml version="1.0" </SPAN><SPAN class="m">?&gt;</SPAN> 
</DIV> 
<DIV class="e"> 
<DIV class="c" STYLE="margin-left:1em;text-indent:-2em"><A href="#" onclick="return false" onfocus="h()" class="b">-</A> 
<SPAN class="m">&lt;</SPAN><SPAN class="t">test</SPAN><SPAN class="m">&gt;</SPAN></DIV> 
<DIV><DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em"> 
<SPAN class="b">&nbsp;</SPAN> 
<SPAN class="m">&lt;</SPAN><SPAN class="t">example</SPAN><SPAN class="m">&gt;</SPAN><SPAN class="tx">Hello</SPAN><SPAN class="m">&lt;/</SPAN><SPAN class="t">example</SPAN><SPAN class="m">&gt;</SPAN> 
</DIV></DIV> 
<DIV><SPAN class="b">&nbsp;</SPAN> 
<SPAN class="m">&lt;/</SPAN><SPAN class="t">test</SPAN><SPAN class="m">&gt;</SPAN></DIV> 
</DIV></DIV> 
</BODY> 
</HTML> 

我怎樣才能獲得XML本身從Web瀏覽器控制?我試圖解析的XML文件顯示關於用戶的信息,並且它需要cookie。用戶在應用程序嘗試獲取此信息之前先登錄,以便在webBrowser控件中設置cookie。我嘗試過使用Xml.Load(),但根據我的情況,這並不允許您使用CookieContainer,我也嘗試使用CookieContainer使用HttpWebRequest,但我無法將cookie從webBrowser設置到CookieContainer中。

如果任何人有辦法從Web瀏覽器控件加載XML本身,或者從CookieContainer中的Web瀏覽器控件使用cookie的解決方案,我將不勝感激。

回答

1

你可以試試下,這會給你餅乾。

webBrowser1.Document.Cookie 

並將其添加到cookie容器中,如下所示。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myUri); 
request.CookieContainer = new CookieContainer(); 
request.CookieContainer.SetCookies(myUri, webBrowser1.Document.Cookie); 
+0

感謝您的建議,但我以前嘗試過。雖然我可能做錯了,你知道Uri是否必須採用某種格式嗎?以前,我使用的是我發送Web請求的URL。 – Dan 2012-08-05 19:48:15

+0

或者你可以使用一個叫做InternetGetCookie的API,你可以從這個API中獲得。 – 2012-08-06 04:28:51