BorlandTalk.com Forum Index BorlandTalk.com
Borland discussion newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Display in-memory xml-document in TWebBrowser

 
Post new topic   Reply to topic    BorlandTalk.com Forum Index -> Delphi XML
View previous topic :: View next topic  
Author Message
Heiko Tappe
Guest





PostPosted: Tue May 15, 2007 1:50 pm    Post subject: Display in-memory xml-document in TWebBrowser Reply with quote



Does anybody know how to display an IXmlDocument in a TWebBrowser (or any
other? are there any others?) component?
I could of course create a temp file and use "file://". But, as you might
guess, I don't like this idea ;-)

--Heiko
Back to top
Eddie Shipman
Guest





PostPosted: Tue May 15, 2007 8:04 pm    Post subject: Re: Display in-memory xml-document in TWebBrowser Reply with quote



Heiko Tappe wrote:

Quote:
Does anybody know how to display an IXmlDocument in a TWebBrowser (or
any other? are there any others?) component? I could of course
create a temp file and use "file://". But, as you might guess, I
don't like this idea ;-)

--Heiko

Use this code:

procedure LoadBrowserFromStream(Browser: TWebBrowser; Stream: TStream);
var
hr: HRESULT;
doc: IHTMLDocument2;
persStream: IPersistStreamInit;
Adapter: IStream;
begin
Browser.HandleNeeded();
Browser.Navigate('about:blank');

doc := Browser.Document as IHTMLDocument2;

if not Assigned(doc) then
raise Exception.Create('WebBrowser is not initialized');

persStream := doc as IPersistStreamInit;

hr := persStream.InitNew();
OleCheck(hr);

Adapter := TStreamAdapter.Create(Stream, soReference);
hr := persStream.Load(Adapter);
OleCheck(hr);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
doc, style: IXMLDOMDocument2;
strHtml: string;
strStream: TStringStream;
begin
doc := CoDOMDocument.Create();
doc.async := False;
doc.loadXML(Memo1.Lines.Text);
OleCheck(doc.parseError.errorCode);

style := CoDomDocument.Create();
style.async := False;
if FileExists(ExtractFilePath(ParamStr(0)) + 'DEFAULTSS.xsl') then
begin
style.load(ExtractFilePath(ParamStr(0)) + 'DEFAULTSS.xsl');
OleCheck(style.parseError.errorCode);

strHtml := doc.transformNode(style);

strStream := TStringStream.Create(strHtml);
try
LoadBrowserFromStream(WebBrowser1, strStream);
finally
strStream.Free();
end;
end;
end;

Here is the source to DEFAULTSS.xsl:
<?xml version="1.0"?>
<x:stylesheet xmlns:x="http://www.w3.org/TR/WD-xsl"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:d2="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
<x:template match="/">
<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;pad
ding-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;pad
ding-left:.3em;font:small Courier;color:#888888}
..ci{font:small Courier;color:#888888}
PRE{margin:0px;display:inline}</STYLE>
<SCRIPT><x:comment>
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;
</x:comment></SCRIPT>
</HEAD>
<BODY class="st"><x:apply-templates/></BODY>
</HTML>
</x:template>
<x:template match="node()[nodeType()=10]">
<DIV class="e"><SPAN>
<SPAN class="b"><x:entity-ref name="nbsp"/></SPAN>
<SPAN class="d"><!DOCTYPE <x:node-name/><I> (View Source for full
doctype...)</I>></SPAN>
</SPAN></DIV>
</x:template>
<x:template match="pi()">
<DIV class="e">
<SPAN class="b"><x:entity-ref name="nbsp"/></SPAN>
<SPAN class="m"><?</SPAN><SPAN class="pi"><x:node-name/>
<x:value-of/></SPAN><SPAN class="m">?></SPAN>
</DIV>
</x:template>
<x:template match="pi('xml')">
<DIV class="e">
<SPAN class="b"><x:entity-ref name="nbsp"/></SPAN>
<SPAN class="m"><?</SPAN><SPAN class="pi">xml <x:for-each
select="@*"><x:node-name/>="<x:value-of/>" </x:for-each></SPAN><SPAN
class="m">?></SPAN>
</DIV>
</x:template>
<x:template match="@*" xml:space="preserve"><SPAN><x:attribute
name="class"><x:if match="x:*/@*">x</x:if>t</x:attribute>
<x:node-name/></SPAN><SPAN class="m">="</SPAN><B><x:value-of/></B><SPAN
class="m">"</SPAN></x:template>
<x:template match="@xmlns:*|@xmlns|@xml:*"><SPAN class="ns">
<x:node-name/></SPAN><SPAN class="m">="</SPAN><B
class="ns"><x:value-of/></B><SPAN class="m">"</SPAN></x:template>
<x:template match="@dt:*|@d2:*"><SPAN class="dt">
<x:node-name/></SPAN><SPAN class="m">="</SPAN><B
class="dt"><x:value-of/></B><SPAN class="m">"</SPAN></x:template>
<x:template match="textnode()">
<DIV class="e">
<SPAN class="b"><x:entity-ref name="nbsp"/></SPAN>
<SPAN class="tx"><x:value-of/></SPAN>
</DIV>
</x:template>
<x:template match="comment()">
<DIV class="k">
<SPAN><A class="b" onclick="return false" onfocus="h()"
STYLE="visibility:hidden">-</A> <SPAN class="m"><!--</SPAN></SPAN>
<SPAN id="clean" class="ci"><PRE><x:value-of/></PRE></SPAN>
<SPAN class="b"><x:entity-ref name="nbsp"/></SPAN> <SPAN
class="m">--></SPAN>
<SCRIPT>f(clean);</SCRIPT></DIV>
</x:template>
<x:template match="cdata()">
<DIV class="k">
<SPAN><A class="b" onclick="return false" onfocus="h()"
STYLE="visibility:hidden">-</A> <SPAN
class="m"><![CDATA[</SPAN></SPAN>
<SPAN id="clean" class="di"><PRE><x:value-of/></PRE></SPAN>
<SPAN class="b"><x:entity-ref name="nbsp"/></SPAN> <SPAN
class="m">]]></SPAN>
<SCRIPT>f(clean);</SCRIPT></DIV>
</x:template>
<x:template match="*">
<DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
<SPAN class="b"><x:entity-ref name="nbsp"/></SPAN>
<SPAN class="m"><</SPAN><SPAN><x:attribute name="class"><x:if
match="x:*">x</x:if>t</x:attribute><x:node-name/></SPAN>
<x:apply-templates select="@*"/><SPAN class="m"> /></SPAN>
</DIV></DIV>
</x:template>
<x:template match="*[node()]">
<DIV class="e">
<DIV class="c"><A href="#" onclick="return false" onfocus="h()"
class="b">-</A> <SPAN class="m"><</SPAN><SPAN><x:attribute
name="class"><x:if
match="x:*">x</x:if>t</x:attribute><x:node-name/></SPAN><x:apply-templat
es select="@*"/> <SPAN class="m">></SPAN></DIV>
<DIV><x:apply-templates/>
<DIV><SPAN class="b"><x:entity-ref name="nbsp"/></SPAN> <SPAN
class="m"></</SPAN><SPAN><x:attribute name="class"><x:if
match="x:*">x</x:if>t</x:attribute><x:node-name/></SPAN><SPAN
class="m">></SPAN></DIV>
</DIV></DIV>
</x:template>
<x:template
match="*[textnode()$and$$not$(comment()$or$pi()$or$cdata())]">
<DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
<SPAN class="b"><x:entity-ref name="nbsp"/></SPAN> <SPAN
class="m"><</SPAN><SPAN><x:attribute name="class"><x:if
match="x:*">x</x:if>t</x:attribute><x:node-name/></SPAN><x:apply-templat
es select="@*"/>
<SPAN class="m">></SPAN><SPAN class="tx"><x:value-of/></SPAN><SPAN
class="m"></</SPAN><SPAN><x:attribute name="class"><x:if
match="x:*">x</x:if>t</x:attribute><x:node-name/></SPAN><SPAN
class="m">></SPAN>
</DIV></DIV>
</x:template>
<x:template match="*[*]">
<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"><</SPAN><SPAN><x:attribute name="class"><x:if
match="x:*">x</x:if>t</x:attribute><x:node-name/></SPAN><x:apply-templat
es select="@*"/> <SPAN class="m">></SPAN></DIV>
<DIV><x:apply-templates/>
<DIV><SPAN class="b"><x:entity-ref name="nbsp"/></SPAN> <SPAN
class="m"></</SPAN><SPAN><x:attribute name="class"><x:if
match="x:*">x</x:if>t</x:attribute><x:node-name/></SPAN><SPAN
class="m">></SPAN></DIV>
</DIV></DIV>
</x:template>
</x:stylesheet>
Back to top
Remy Lebeau (TeamB)
Guest





PostPosted: Wed May 16, 2007 1:18 am    Post subject: Re: Display in-memory xml-document in TWebBrowser Reply with quote



"Eddie Shipman" <mr_delphi_developer (AT) nospamyahoo (DOT) com> wrote in message
news:xn0f68bysh8wydk003 (AT) forums (DOT) borland.com...

Quote:
Use this code:

The only downside to that approach is that the browser won't know the
type of data being loaded into it, so it might not display it the same
as it would a normal file.


Gambit
Back to top
Heiko Tappe
Guest





PostPosted: Wed May 16, 2007 2:34 pm    Post subject: Re: Display in-memory xml-document in TWebBrowser Reply with quote

Works like a charm Smile
Thanks a million Eddie!

--Heiko
Back to top
Eddie Shipman
Guest





PostPosted: Wed May 16, 2007 6:35 pm    Post subject: Re: Display in-memory xml-document in TWebBrowser Reply with quote

Remy Lebeau (TeamB) wrote:

Quote:

"Eddie Shipman" <mr_delphi_developer (AT) nospamyahoo (DOT) com> wrote in message
news:xn0f68bysh8wydk003 (AT) forums (DOT) borland.com...

Use this code:

The only downside to that approach is that the browser won't know the
type of data being loaded into it, so it might not display it the same
as it would a normal file.


Gambit

I defaults to HTML and it won't matter because it is being transformed
by the stylesheet.

--
Back to top
Display posts from previous:   
Post new topic   Reply to topic    BorlandTalk.com Forum Index -> Delphi XML All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.