xsl-list
[Top] [All Lists]

RE: Dynamic recognition of element

2003-04-22 22:08:25
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



<Prev in Thread] Current Thread [Next in Thread>