RE: Resolving ENTITY attributes

Subject: RE: Resolving ENTITY attributes
From: Gabriel Paiz III <gpaiz@xxxxxxxxx>
Date: Mon, 3 May 1999 09:44:34 -0700
Re:

> >> Reading the XSLT spec, I don't see a way of resolving ENTITY-type
> >> attribute values.
> >...
> >> Is there a way to do this? 
> >

> <!DOCTYPE xmldoc ... [
> <!ENTITY img1 SYSTEM "image1.gif" NDATA gif>
> ...
> ]>
> <xmldoc>
> ...
> <xmlimg src="img1"/>
> ...
> </xmldoc>

If you're working with IE5, you can use something like below to save
system ids and match entities to them.  The Microsoft site warns about
using globals in stylesheets,

http://msdn.microsoft.com/xml/xsl/tutorials/script-eval.asp

so it might not work in all situations. 1) Is there a way to test for
the type of a node in the new draft?  2) The test only works if the
template rule is first and doesn't have a match pattern. 


<!-- ******** default element templates ************ -->
<xsl:template>
	<xsl:if test=".[nodeType() = 6]">
		<xsl:eval>saveSystemId(this);</xsl:eval>
	</xsl:if>
	<xsl:apply-templates/>
</xsl:template>
<xsl:template match="textnode()"><xsl:value-of/></xsl:template>

<!-- ******** example rule *********  -->
<xsl:template match="sgmlimg">
  	<xsl:element name="img">
		<xsl:attribute name="src">
			<xsl:eval>lookupSystemId(this,
"src");</xsl:eval>
		</xsl:attribute>
     </xsl:element>
</xsl:template>

<xsl:script>
//<![CDATA[

var sEntities = new Array();

function saveSystemId(oNode)
{
	var sName = oNode.nodeName;
	if (sName.length == 0)
          return;
	sEntities[sName] = oNode.systemId;
}

function lookupSystemId(oNode, sAttr)
{ 
	var oAttrMap = oNode.attributes;
  	if (oAttrMap == null)
		return;
   	var oAttrNode = oAttrMap.getNamedItem(sAttr);
   	if (oAttrNode == null)
		return;
   	var sName = oAttrNode.value;
// or, if you can assume the attribute will always exist
//	var sName = oNode.attributes.getNamedItem(sAttr).value;
	if (sName.length == 0)	
      	return;
	return(sEntities[sName]);
}
//]]>
</xsl:script>


__________________________________
Gabriel Paiz III
SPX - Valley Forge T.I.S.
25691 Atlantic Ocean Drive Suite B-7
Lake Forest, CA 92630
USA    www.vftis.com
__________________________________

Tel:	(949) 460 0094
Fax:	(949) 460 0095
e-Mail:	gpaiz@xxxxxxxxx
__________________________________ 	 
 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread