lawso
asked on
Transforming XML with SelectSingleNode
Hi XMLers
I have some VB Script that processes some XML using XSLT.
I wanted to select just one node based on some request variables and then display that in HTML using XSLT.
I can select the correct node, but the XSLT simply draws out the values in one line.
Can someone help me .?
---------------
XML:
<PORTFOLIO>
<PORTFOLIO_NAME id="Latest">
<PORTFOLIO_PAGE id="1">
<CLIENT>
<CLIENT_NAME>AAAAAAAAAA</C LIENT_NAME >
<CLIENT_URL>AAAAAAAAAA</CL IENT_URL>
<CLIENT_IMAGE>AAAAAAAAAA</ CLIENT_IMA GE>
<CLIENT_TEXT>AAAAAAAAAA.</ CLIENT_TEX T>
</CLIENT>
<CLIENT>
<CLIENT_NAME>BBBBBBBBB</CL IENT_NAME>
<CLIENT_URL>BBBBBBBBB</CLI ENT_URL>
<CLIENT_IMAGE>BBBBBBBBB</C LIENT_IMAG E>
<CLIENT_TEXT>BBBBBBBBB</CL IENT_TEXT>
</CLIENT>
<CLIENT>
<CLIENT_NAME>CCCCCCCCC</CL IENT_NAME>
<CLIENT_URL>CCCCCCCCC</CLI ENT_URL>
<CLIENT_IMAGE>CCCCCCCCC</C LIENT_IMAG E>
<CLIENT_TEXT>CCCCCCCCC</CL IENT_TEXT>
</CLIENT>
</PORTFOLIO_PAGE>
<PORTFOLIO_PAGE id="2">
<CLIENT>
<CLIENT_NAME>NNN</CLIENT_N AME>
<CLIENT_URL>NNN</CLIENT_UR L>
<CLIENT_IMAGE>NNN</CLIENT_ IMAGE>
<CLIENT_TEXT>NNN</CLIENT_T EXT>
</CLIENT>
</PORTFOLIO_PAGE>
</PORTFOLIO_NAME>
<PORTFOLIO_NAME id="Latest2">
<PORTFOLIO_PAGE id="1">
<CLIENT>
<CLIENT_NAME>XXXXXX</CLIEN T_NAME>
<CLIENT_URL>XXXXXX</CLIENT _URL>
<CLIENT_IMAGE>XXXXXX</CLIE NT_IMAGE>
<CLIENT_TEXT>XXXXXX.</CLIE NT_TEXT>
</CLIENT>
<CLIENT>
<CLIENT_NAME>YYYYYYYY</CLI ENT_NAME>
<CLIENT_URL>YYYYYYYY</CLIE NT_URL>
<CLIENT_IMAGE>YYYYYYYY</CL IENT_IMAGE >
<CLIENT_TEXT>YYYYYYYY</CLI ENT_TEXT>
</CLIENT>
<CLIENT>
<CLIENT_NAME>ZZZZZZZZZ</CL IENT_NAME>
<CLIENT_URL>ZZZZZZZZZ</CLI ENT_URL>
<CLIENT_IMAGE>ZZZZZZZZZ</C LIENT_IMAG E>
<CLIENT_TEXT>ZZZZZZZZZ</CL IENT_TEXT>
</CLIENT>
</PORTFOLIO_PAGE>
</PORTFOLIO_NAME>
</PORTFOLIO>
---------------
XSLT:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/PORTFOLIO_PAGE">
<xsl:for-each select="CLIENT">
<xsl:value-of select="CLIENT_NAME"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
---------------
Code:
xmlPath= "portfolio.xml" 'XML file path
xslPath="transform.xslt" 'XSL file path
Set xmlDoc = Server.CreateObject("msxml 2.DOMDocum ent")
Set xslDoc = Server.CreateObject("msxml 2.DOMDocum ent")
xmlDoc.async = False 'Allow the document to complete loading
success = xmlDoc.Load(Server.MapPath (xmlPath)) 'load the XML
If (success) then 'file successfully loaded
'set oNode = xmldoc.documentElement.Sel ectSingleN ode("//POR TFOLIO_NAM E[@id='Lat est']").Se lectSingle Node("PORT FOLIO_PAGE [@id=2]")
'set oNode = xmldoc.SelectSingleNode("/ /PORTFOLIO _NAME[@id= 'Latest']/ PORTFOLIO_ PAGE[@id=' 1']")
'Single Node with Params
'strXsl.documentElement.se lectSingle Node("//xs l:param[@n ame='sort_ column']") ;
set oNode = xmldoc.SelectSingleNode("/ /PORTFOLIO _NAME[@id= 'Latest']/ PORTFOLIO_ PAGE[@id=' 1']")
response.Write oNode.xml & "<hr>"
'response.End
xslDoc.async = False
success = xslDoc.Load(Server.MapPath (xslPath)) 'load the XSL
If (success) then
Response.write oNode.transformNode(xslDoc )
Else
Response.Write "Unable to load the stylesheet"
End if
Else
Response.Write "Unable to load the XML source"
End If
Set xmlDoc = Nothing
Set xslDoc = Nothing
I have some VB Script that processes some XML using XSLT.
I wanted to select just one node based on some request variables and then display that in HTML using XSLT.
I can select the correct node, but the XSLT simply draws out the values in one line.
Can someone help me .?
---------------
XML:
<PORTFOLIO>
<PORTFOLIO_NAME id="Latest">
<PORTFOLIO_PAGE id="1">
<CLIENT>
<CLIENT_NAME>AAAAAAAAAA</C
<CLIENT_URL>AAAAAAAAAA</CL
<CLIENT_IMAGE>AAAAAAAAAA</
<CLIENT_TEXT>AAAAAAAAAA.</
</CLIENT>
<CLIENT>
<CLIENT_NAME>BBBBBBBBB</CL
<CLIENT_URL>BBBBBBBBB</CLI
<CLIENT_IMAGE>BBBBBBBBB</C
<CLIENT_TEXT>BBBBBBBBB</CL
</CLIENT>
<CLIENT>
<CLIENT_NAME>CCCCCCCCC</CL
<CLIENT_URL>CCCCCCCCC</CLI
<CLIENT_IMAGE>CCCCCCCCC</C
<CLIENT_TEXT>CCCCCCCCC</CL
</CLIENT>
</PORTFOLIO_PAGE>
<PORTFOLIO_PAGE id="2">
<CLIENT>
<CLIENT_NAME>NNN</CLIENT_N
<CLIENT_URL>NNN</CLIENT_UR
<CLIENT_IMAGE>NNN</CLIENT_
<CLIENT_TEXT>NNN</CLIENT_T
</CLIENT>
</PORTFOLIO_PAGE>
</PORTFOLIO_NAME>
<PORTFOLIO_NAME id="Latest2">
<PORTFOLIO_PAGE id="1">
<CLIENT>
<CLIENT_NAME>XXXXXX</CLIEN
<CLIENT_URL>XXXXXX</CLIENT
<CLIENT_IMAGE>XXXXXX</CLIE
<CLIENT_TEXT>XXXXXX.</CLIE
</CLIENT>
<CLIENT>
<CLIENT_NAME>YYYYYYYY</CLI
<CLIENT_URL>YYYYYYYY</CLIE
<CLIENT_IMAGE>YYYYYYYY</CL
<CLIENT_TEXT>YYYYYYYY</CLI
</CLIENT>
<CLIENT>
<CLIENT_NAME>ZZZZZZZZZ</CL
<CLIENT_URL>ZZZZZZZZZ</CLI
<CLIENT_IMAGE>ZZZZZZZZZ</C
<CLIENT_TEXT>ZZZZZZZZZ</CL
</CLIENT>
</PORTFOLIO_PAGE>
</PORTFOLIO_NAME>
</PORTFOLIO>
---------------
XSLT:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/PORTFOLIO_PAGE">
<xsl:for-each select="CLIENT">
<xsl:value-of select="CLIENT_NAME"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
---------------
Code:
xmlPath= "portfolio.xml" 'XML file path
xslPath="transform.xslt" 'XSL file path
Set xmlDoc = Server.CreateObject("msxml
Set xslDoc = Server.CreateObject("msxml
xmlDoc.async = False 'Allow the document to complete loading
success = xmlDoc.Load(Server.MapPath
If (success) then 'file successfully loaded
'set oNode = xmldoc.documentElement.Sel
'set oNode = xmldoc.SelectSingleNode("/
'Single Node with Params
'strXsl.documentElement.se
set oNode = xmldoc.SelectSingleNode("/
response.Write oNode.xml & "<hr>"
'response.End
xslDoc.async = False
success = xslDoc.Load(Server.MapPath
If (success) then
Response.write oNode.transformNode(xslDoc
Else
Response.Write "Unable to load the stylesheet"
End if
Else
Response.Write "Unable to load the XML source"
End If
Set xmlDoc = Nothing
Set xslDoc = Nothing
Hi lawso,
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
try this on the next line
<xsl:output indent="yes" />
Cheers!
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
try this on the next line
<xsl:output indent="yes" />
Cheers!
lawso,
if you want this to be html,
then you need tags
your code has a > in front of it
new lines don't
> <?xml version="1.0" encoding="UTF-8" ?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
> <xsl:template match="/PORTFOLIO_PAGE">
<html><body>
> <xsl:for-each select="CLIENT">
<p>
> <xsl:value-of select="CLIENT_NAME"/>
</p>
> </xsl:for-each>
</body></html>
> </xsl:template>
>
> </xsl:stylesheet>
if you want this to be html,
then you need tags
your code has a > in front of it
new lines don't
> <?xml version="1.0" encoding="UTF-8" ?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
> <xsl:template match="/PORTFOLIO_PAGE">
<html><body>
> <xsl:for-each select="CLIENT">
<p>
> <xsl:value-of select="CLIENT_NAME"/>
</p>
> </xsl:for-each>
</body></html>
> </xsl:template>
>
> </xsl:stylesheet>
ASKER
Gertone... The function is called from inside HTML so it has the HTML around it.
I will give your other suggestion a try.
I will give your other suggestion a try.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
If I find 'Latest' and '2'
I get NNNNNNNNNNNN