Embedding XML into ASPX question

  • Thread starter Thread starter Victor Fees
  • Start date Start date
V

Victor Fees

I have an XML string in a database that I would like to display using XSLT.
All of that works like a champ, but I can't figure out how to embed the XML
inside an ASPX page.

For example, I have an ASPX page with a Header User Control and a Footer
User Control. I'd like to put the transformed XML right in the middle. It
seems like this is something that should be doable, but I can't quite
figure it out. Is anyone out there doing this, and if so, can you point me
in the right direction?

Thanks,
Vic Fees
 
Put a PlaceHolder or LiteralControl where you want the XML to be, and add it
to that control.

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
http://www.takempis.com
Complex things are made up of
lots of simple things.
 
Victor said:
I have an XML string in a database that I would like to display using XSLT.
All of that works like a champ, but I can't figure out how to embed the XML
inside an ASPX page.

For example, I have an ASPX page with a Header User Control and a Footer
User Control. I'd like to put the transformed XML right in the middle.
You can put placeholder <div> between them and fill transformation result to
its InnerHtml property.
 
Vic,

The System.Web.UI.WebControls.Xml class is designed for exactly this
functionality.
It has 2 pulic properties: Document and Transform which take your Xml
Document and Xslt Transform Document respectively and
perform the transform for you. Like any WebControl it can just be dropped
on your aspx page.

Another way to do it, and the way I do it for performance reasons, is to
write your own Custom Control derived from System.Web.UI.Control.

This gives you an HtmlTextWriter that you can write to by performing an Xsl
Transform on an XPath Document, the XPath document is more
performant than the Xml Document class. Try something like the following:

using System;
using System.Web;
using System.Web.UI;
using System.Xml;
using System.Xml.Xpath;
using System.Xml.Xsl;

public class MyXmlTransformer : System.Web.UI.Control
{
protected override void Render(HtmlTextWriter writer)
{
XPathDocument theXDoc = new XPathDocument("myxml.xml");

XslTransform theXslt = new XslTransform();
theXslt.Load("thexslt.xsl");

theXslt.Transform(theXDoc, null, writer);
}
}

Then just drop one of these on your aspx page. Obviously the above can be
made more re-usable by exposing the
XPathDocument and XslTransform as properties of the class, mess about with
it and see what you come up with.

Hope this helps,

Dave


----- Original Message -----
From: "Victor Fees" <[email protected]>
Newsgroups:
microsoft.public.dotnet.general,microsoft.public.dotnet.framework.aspnet,mic
rosoft.public.dotnet.xml
Sent: Wednesday, July 30, 2003 2:44 PM
Subject: Embedding XML into ASPX question
 
You can put placeholder <div> between them and fill transformation
result to its InnerHtml property.

I have a follow-up question about this . . . . I have HTML generic
textboxes in my XSLT, and would like to reference them in the code-behind
for the page in which I am embedding the XML. I've used a recursive
subroutine to prove that I can see the control in the code-behind, but I
can't seem to access anything of value (i.e., ID).

Private Sub DrillDown(ByVal objControl As Control)
If objControl.ID Is Nothing Then
Me.Label1.Text += "Type: " + objControl.GetType().ToString()
+ "<br>"
Else
Me.Label1.Text += "Control.ID = " + objControl.ID.ToString +
"<br>"
End If
If objControl.HasControls Then
Me.Label1.Text += "this control has children<br>"
Dim objChild As Control
For Each objChild In objControl.Controls
Me.DrillDown(objChild)
Next
End If
End Sub

In my XSLT, I'm doing this:

<xsl:for-each select="Survey/Questions/Question">
<p><xsl:value-of select="QuestionText">
</xsl:value-of>
<xsl:choose>
<xsl:when test="@type = 'inputbox'">
<input>
<xsl:attribute name="type">text
</xsl:attribute>
<xsl:attribute name="id">txtQ
<xsl:value-of select="@id"></xsl:value-of></xsl:attribute>
<xsl:attribute name="name">txtQ
<xsl:value-of select="@id"></xsl:value-of></xsl:attribute>
<xsl:attribute name="runat">
server</xsl:attribute>
</input>
</xsl:when>
</xsl:choose>
<xsl:value-of select="@id"></xsl:value-of>
</p>
</xsl:for-each>

So, you can see that the "inputbox" is a generic html <input> with an id
of txtQ1 and a name of txtQ1. However, I can't find a variable that
gives me this value in the code behind. I've tried using <asp:TextBox>
embedded in my XML, but that provides a new set of problems -- the ID
turns out to be TextBox1, and the display gets worse.

Regardless, any idea what I'm doing wrong here?
 
Back
Top