RE: [xsl] Dynamic recognition of element

Subject: RE: [xsl] Dynamic recognition of element
From: Edward.Middleton@xxxxxxxxxxx
Date: Wed, 23 Apr 2003 14:08:25 +0900
>> How can I dynamically build the XPath in the case to display 
>> streetNmbr?
> 
><xsl:value-of select="//*/ns1:address1"/>
>

This will just match anything with an ns1:address1 node.

I don't know the structure of the data you are using so I have provided an example of dynamically building an XPath using the following.

UserDataFile.xml
<?xml version="1.0"?>
<theStateTheUserHaveProvided addressVO="CAAddressVO"/>


AddressFile.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="dynamicAddress.xslt"?>
<test xmlns:ns1="test">
	<ns1:USAddressVO>
		<ns1:address1>address 1</ns1:address1>
	</ns1:USAddressVO>
	<ns1:CAAddressVO>
		<ns1:address1>address 2</ns1:address1>
	</ns1:CAAddressVO>
	<ns1:CTAddressVO>
		<ns1:address1>address 3</ns1:address1>
	</ns1:CTAddressVO>
</test>

dynamicAddress.xslt file
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; xmlns:ns1="test" xmlns:ota="test2">
	<xsl:output method="xml" version="1.0"/>
	<xsl:template match="/">
		<base>
			<xsl:apply-templates/>
		</base>
	</xsl:template>
	<xsl:template match="test">
		<xsl:variable name="Address" select="document('UserDataFile.xml')/theStateTheUserHaveProvided/@addressVO"/>
		<ota:StreetNmbr>
			<xsl:value-of select="*[local-name()=$Address]/ns1:address1"/>
		</ota:StreetNmbr>
	</xsl:template>
	<xsl:template match="text()"/>
</xsl:stylesheet>

This will produce a file as follows, based on user data provided in the UserDataFile.xml

<?xml version="1.0"?>
<base xmlns:ns1="test" xmlns:ota="test2">
	<ota:StreetNmbr>address 2</ota:StreetNmbr>
</base>


Edward Middleton

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


Current Thread