Solved

Change HTML text color, reading color from XML data

Posted on 2009-04-14
6
426 Views
Last Modified: 2013-11-19
I've an HTML table which uses an XML island as a data source. It displays fine.  One of the XML elements (called TYPE) contains an RGB color value.  I'd like make the text color for each entry the same as the TYPE color value.  Any ideas?  Thanks.
**** HTML ****

 

<table datasrc="#xmlSOEBase" width="100%" border=0 cellSpacing=0 language=vbscript>

	<tr>

		<td>

			<div><Label datafld="DISPLAY"></Label></div>

		</td>

	</tr>

</table>

 

<xml id="xmlSOEBase"></xml>

 

**** XML ****

<ROOT>

	<BASE>

		<DISPLAY>First entry</DISPLAY>

		<TYPE>762452</TYPE>

	<BASE>

	<BASE>

		<DISPLAY>Second entry</DISPLAY>

		<TYPE>345872</TYPE>

	<BASE>

</ROOT>

Open in new window

0
Comment
Question by:sj_hicks
  • 4
  • 2
6 Comments
 
LVL 60

Expert Comment

by:Geert Bormans
ID: 24145523
Data Islands are a very old, Internet Explorer only technique.
It is very unflexible, and you can only map elements to data cells.
You would need a mapping from elements to a class or background colour attribute,
which you can't simply using data islands.

Have you considered XSLT?
It is easy and straightforward, performs a lot better and is a lot more flexible.
Just a little JavaScript and an little XSLT stylesheet and you are done.
Let me know if that is acceptable for you
0
 
LVL 7

Author Comment

by:sj_hicks
ID: 24153437
Hi Gertone, thanks for the info.  I'm not too worried about it being IE only, as the HTML being run as an HTA (HTML Application).  I'm including this table as part of a larger HTML document.  I've used basic XSLT before to make an XML file display nicely when you open the XML in a browser.  I looked into using XSLT for this scenario, but I'm not sure how make it work within an existing HTML document (if possible).  Are you able to give me any pointers, samples, links etc?
0
 
LVL 60

Accepted Solution

by:
Geert Bormans earned 500 total points
ID: 24156589
Here is a basic HTML file,
It has a function that transforms the XML into an HTML table
and overwrites the innerHTML of a div with the transformation result onLoad
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

	

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Select Transform</title>

    <script language="javascript">

      function transF()

      {

         var oXML = new ActiveXObject("Msxml2.DOMDocument");

         var oXSL = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");

         var oTmpl= new ActiveXObject("Msxml2.XSLTemplate");

         var oProc ;
 

	       oXML.async = false;

         oXML.resolveExternals = false;

	       oXML.load("SOEB.xml"); 

	       

         oXSL.async = false;

         oXSL.resolveExternals = false;

         oXSL.load("SOEB.xsl");
 

         oTmpl.stylesheet = oXSL;
 

         oProc = oTmpl.createProcessor();

         oProc.input = oXML;

				 oProc.transform();

         var resHTM = oProc.output;

         document.getElementById("xmlSOEBase").innerHTML = resHTM;

      }

    </script>

</head>
 

<body onload="transF();">

<div id="xmlSOEBase"></div>

</body>

</html>

Open in new window

0
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 
LVL 60

Expert Comment

by:Geert Bormans
ID: 24156601
I named your xml document "SOEB.xml" and I named the XSLT "SOEB.xsl"
as you can see in the script
Here is the XSLT
Works fine at my desk
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:template match="/">

        <table border="1">

            <tr>

                <th>

                    <xsl:text>DISPLAY</xsl:text>

                </th>

            </tr>

            <xsl:apply-templates/>

        </table>

    </xsl:template>

    <xsl:template match="BASE">

        <tr bgcolor="{TYPE}">

            <td>

                <xsl:value-of select="DISPLAY"/>

            </td>

        </tr>

    </xsl:template>
 

</xsl:stylesheet>

Open in new window

0
 
LVL 7

Author Closing Comment

by:sj_hicks
ID: 31571264
Thanks for the info.  It doesn't quite fit into the HTA structure I'm using (my fault, not yours) - the current setup is quite large and detailed and it would take a quite a bit of rework to implement this functionality using the info you've provided, so I'll give it a miss for now.  However, thanks for your assistance - I've learnt some things I may be able to use in the future.
0
 
LVL 60

Expert Comment

by:Geert Bormans
ID: 24165263
welcome
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Many times as a report developer I've been asked to display normalized data such as three rows with values Jack, Joe, and Bob as a single comma-separated string such as 'Jack, Joe, Bob', and vice versa.  Here's how to do it. 
Use these top 10 tips to master the art of email signature design. Create an email signature design that will easily wow recipients, promote your brand and highlight your professionalism.
In this tutorial viewers will learn how to style elements, such a divs, with a "drop shadow" effect using the CSS box-shadow property Start with a normal styled element, such as a div.: In the element's style, type the box shadow property: "box-shad…
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)

867 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now