xslt not working when xml has xmlns="urn" in root element.


L

Lee

Hello guys, I am new to XML and working on a XSLT to transforn yahoo
shopping search result to html. my problem is the return XML contain
xmlns in root element, here is the sample xml:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="aproductsearch.xslt"?>
<ProductSearch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:yahoo:aprods" xsi:schemaLocation="urn:yahoo:aprods
http://api.shopping.yahoo.com/shoppingservice/v2/aproductsearch.xsd">
...................
</ProductSearch>


I am testing my xslt file:


<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:eek:utput method="html" encoding="utf-8" omit-xml-
declaration="yes"
indent="yes"/>


<xsl:template match="/">
<HTML>
<BODY>
<TABLE BORDER="2">
<TR>
<TD>From</TD>
<TD>To</TD>
</TR>
<xsl:for-each select="ProductSearch/
Products/Product">
<TR>
<TD>
<xsl:value-of
select="Catalog/PriceFrom"/>
</TD>
<TD>
<xsl:value-of
select="Catalog/PriceTo"/>
</TD>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>


</xsl:stylesheet>


if I remove the xmlns="urn:yahoo:aprods" from the XML, then the xslt
works fine, otherwise, nothing shows up. I don't know what is the
problem of my xslt file.


Thanks a lot!
 
Ad

Advertisements

P

p.lepin

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl"
href="aproductsearch.xslt"?>
<ProductSearch
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:yahoo:aprods"
xsi:schemaLocation=
"urn:yahoo:aprodshttp://api.shopping.yahoo.com/shoppingservice/v2/aproductsearch.xsd">
..................
</ProductSearch>

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:eek:utput method="html" encoding="utf-8"
omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<HTML>
<BODY>
<TABLE BORDER="2">
<TR>
<TD>From</TD>
<TD>To</TD>
</TR>
<xsl:for-each
select="ProductSearch/Products/Product">
<TR>
<TD>
<xsl:value-of select="Catalog/PriceFrom"/>
</TD>
<TD>
<xsl:value-of select="Catalog/PriceTo"/>
</TD>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>

Using tabs or 8 spaces for indentation on the usenet is not
particularly wise.
if I remove the xmlns="urn:yahoo:aprods" from the XML,
then the xslt works fine, otherwise, nothing shows up. I
don't know what is the problem of my xslt file.

What did you expect? ProductSearch element in the XML
document you've provided is really
{urn:yahoo:aprods}ProductSearch, and you're selecting
{}ProductSearch elements in your for-each. Consider reading
some introductory material on XML Namespaces overall and on
using XML Namespaces in XSL Transformations in particular.
 
M

Martin Honnen

Lee said:
<ProductSearch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:yahoo:aprods" xsi:schemaLocation="urn:yahoo:aprods
http://api.shopping.yahoo.com/shoppingservice/v2/aproductsearch.xsd">
..................
</ProductSearch>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Add
xmlns:ap="urn:yahoo:aprods"
on the xsl:stylesheet element, then use the prefix 'ap' in your XPath
expressions e.g.
<xsl:for-each select="ProductSearch/
Products/Product">

said:
<xsl:value-of
select="Catalog/PriceFrom"/>

said:
<xsl:value-of
select="Catalog/PriceTo"/>

<xsl:value-of select="ap:Catalog/ap:priceTo"/>
 
Ad

Advertisements

L

Lee

Add
xmlns:ap="urn:yahoo:aprods"
on the xsl:stylesheet element, then use the prefix 'ap' in your XPath
expressions e.g.






<xsl:value-of select="ap:Catalog/ap:priceTo"/>

Thanks a lot, it works fine now. thanks for the help.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top